集合-Set

来源:互联网 发布:淘宝木偶困境 编辑:程序博客网 时间:2024/06/16 23:17

Set用于存储无序(存入和读取的顺序不一定个相同)的元素,而且不重复存储元素。

在该set中我们常常用到的是HashSet、TreeSet、LinkedHashSet。

HashSet

HashSet是线程不安全的,存取速度快,底层是一哈希表实现的。

哈希表变存放的是哈希值,HashSet存储元素的顺序并不是按照存入时的顺序,而是按照哈希值来存的,取数据的时候也是按照哈希值来取。HashSet判断存入重复元素的规则,使用的是hashcode和equals来判断的。

在对象加入HashSet之前,HashSet会调用对象的hashCode方法来判断对象加入的位置,同时也会与其他已经加入的对象的hashCode进行比较,如果没有相等的hashCode,HashSet就会认为对象没有重复出现。如果哈希值相同,接着会焦勇equals方法,如果equals返回为true,那么HashSet会认为对象重复出现了,加入失败,如果返回false,HashSet认为新加入的对象没有重复,新元素可以存入。

流程图


TreeSet

如果数据要求不能重复存储元素,而且要排序,那么此时可以使用TreeSet

TreeSet是采用的红-黑树的数据结构,默认对元素进行自然排序。如果在比较的时候两个对象返回值为0,那么元素重复。

当然,我们也可以给TreeSet指定排序规则

指定排序规范的方式

一、元素自身具备比较行

元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法,也就是让元素自身具备比较性,这种方式叫做元素的自然排序也叫做默认排序

二、容器具备比较性

当元素自身不具备比较性,或者自身具备的比较性不是所需要的,那么此时可以让容器自身具备。定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeSet集合的构造方法。

 

注:当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主。

LinkedHashSet

         如果需要保存存储数据,并且需要过滤重复元素,可以使用LinkedHashSet。

相关用法,可参考API文档。



1 0
原创粉丝点击