Set接口

Set接口
            Set是一种不包含重复的元素的Collection,Set最多有一个null元素。

HashSet类

顺序是不确定的,不是同步的,集合元素可以是null。

当我们向HashSet 添加一个元素时,hashSet 会调用这个对象的hashCode() 方法来得到该对象的hashCode 值, 然后根据 hashCode 值来决定该对象在HashSet 中存储位置。

简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等。
     注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。

LinkedHashSet  类

LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。 

LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。 

TreeSet类 

TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。向TreeSet中加入的应该是同一个类的对象。 

TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

小结:

HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;

LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代; 

TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。

原文地址:https://www.cnblogs.com/pan2011/p/3650051.html