JDK1.7
Set接口的实现类 HashSet, LinkedHashSet, TreeSet
1、hashSet
HashSet类的特点:能够快速定位集合中的元素、集合中的元素无序(这里所谓的无序并不是完全无序,只是不像List集合按对象的插入顺序保存对象)。
由HashSet类实现的Set集合中的对象必须是惟一的,因此需要添加到HashSet集合中的对象,需要重新实现equals()方法,从而保证插入集合中对象的标识的惟一性。
由HashSet类实现的Set集合的排列方式为按照哈希码排序,根据对象的哈希码确定对象的存储位置,因此需要添加到由HashSet类实现的Set集合中的对象,还需要重新实现hashCode()方法,从而保证插入集合中的对象能够合理地分布在集合中,以便于快速定位集合中的对象。
2、LinkedHashSet
LinkedHashSet是HashSet的子类,该类的方法全部是父类的方法
父类HashSet再利用内部集成的LinkedHashMap来实现按元素的最后访问次序来迭代遍历
对LinkedHashSet的支持
HashSet有一个默认访问权限的构造方法,其中创建了LinkedHashMap用来存储对象
这个构造方法只有LinkedHashSet会调用
3、TreeSet
TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>, Cloneable, java.io.Serializable接口。
TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。
TreeSet 实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。
TreeSet 实现了Cloneable接口,意味着它能被克隆。
TreeSet 实现了java.io.Serializable接口,意味着它支持序列化。
TreeSet是基于TreeMap实现的。
TreeSet是非线程安全的。