-
Set接口:特点:没有重复元素,可以有最多一个null,无序
-
HashSet
- 实现:基于HashMap - 特点:没有顺序,用equals()和hashCode()协同判断元素是否存在
-
LinkedHashSet
- 实现:基于LinkedHashMap - 特点:有顺序(按照插入顺序
-
SortedSet接口
特点:有顺序(按照元素的大小排序)
-
TreeSet
- 实现:基于TreeMap - 特点:排过序的,如果里面的元素是自定义类型,需要指定排序方式
-
ConcurrentSkipListSet
- 实现:基于ConcurrentSkipListMap - 特点:线程安全,支持并发,有排序(可以手动设置)
-
-
List接口
-
LinkedList
- 实现:基于双链表,元素由Entry对象维护 - 特点:随机访问性能差,插入删除性能好,非线程安全
-
ArrayList
- 实现:基于数组,初始长度10,扩展长度1.5倍+1 - 特点:随机访问性能好,插入删除性能差,非线程安全
-
Vector
- 实现:基于数组,初始长度10(可以手动设置),扩展长度2倍(可以手动设置) - 特点:线程安全
-
- List 保证以某种特定插入顺序来维护元素顺序,即保持插入的顺序,另外元素可以重复
- Set 维持它自己的内部排序,随机访问不具有意义。另外元素不可重复。
- Map 保存key-value值,value可多值,key可为null。
-
联系:
三者都来自于List,其中vector,ArrayList底层实现是数组,而LinkedList的底层实现是单链表。
-
三者各自特点:
1.Vector,ArrayList查找快,增删慢。LinkedList相反,查找慢,增删快; 2.vector是线程安全的。ArrayList,LinkedList是线程不安全的;
- HashTable和HashMap及ConcurrentHashMap是基于散列表实现的,但HashTable(线程安全)已被废弃,大多数场合不被建议使用,建议使用ConcurrentHashMap替代HashTable;TreeMap基于红黑树;
- HashMap适用于增删改查,TreeMap适用于遍历排序;HashMap是无序的,TreeMap实现了NavigableMap接口,支持一系列导航方法,是有序的;
- ConcurrentHashMap被用于代替HashTable,在JDK1.7版本中,ConcurrentHashMap采用了分段锁的设计,相比较于HashTable,拥有更高的性能,但相对应的,ConcurrentHashMap放弃了全局锁,使用了局部锁,使其无法提供强一致性的保障,如果有强一致性的需求,那么仍然需要是否使用HashTable;
- Collection是集合类的上级接口,继承与他有关的接口主要有List和Set;
- Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作;常用的方法有sort,SynchronizedMap;
-
treeset
- TreeSet主要可用于排序,TreeSet是SortedSet的实现类; - 如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable接 口,否则程序会抛出异常java.lang.ClassCastException - 原因:TreeSet集合中添加两个Err对象,添加第一个对象时,TreeSet里没有 任何元素,所以不会出现任何问题;当添加第二个Err对象时,TreeSet就会 调用该对象的compareTo(Object obj)方法与集合中的其他元素进行比较— 如果其对应的类没有实现Comparable 接口,则会引发ClassCastException 异常。 - TreeSet判断两个对象是否相等的唯一标准是: 两个对象通过compareTo(Object o)方法比较是否返回0 —如果返回0, TreeSet则会认为它们相等:否则就认为它们不相等。
-
linkedhashmap
LinkedHashMap是HashMap的子类,拥有HashMap所有的特性。HashMap和双向链表即是LinkedHashMap,由于LinkedHashMap额外维护了一个双向列表,所以可以保证迭代的顺序(HashMap是无序的),根据链表中元素的顺序可以将LinkedHashMap分为:保持插入顺序的LinkedHashMap 和 保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的。
Contributes: 木
Reviewers : Hollis, Kevin Lee