Collection 成了三足鼎立之势:
List : 就是个序列…
Set  : 唯一性
 

Queue : 队列,通常FIFO,不过优先级队列和LIFO队列除外

Set:

类名 说明 备注
HashSet 为快速查找而设计 存入元素必须定义hashCode()
TreeSet 保持次序的Set,底层为树 必须实现Comparable
LinkedHashSet 内部使用链表维护元素的插入次序 有HashSet的速度;必须定义hashCode()

 

性能

1. HashSet 性能总是比TreeSet好,特别是添加和查询元素;
2  LinkedHashSet稍逊于HashSet,插入时由于维护链表带来额外开销,尤其随着数据量膨胀表现明显。
3. 要排序的Set,选择TreeSet,而且他迭代通常比HashSet更快。 
Queue:
仅有的两个实现: LinkedList和PriorityQueue,差异并非性能,而是优先级队列多了优先级值,通过实现Comparable进行控制

 

List:

ArrayList和LinkedList(他也实现了Queue),通常使得ArrayList成了唯一选择。

在性能上:

ArrayList: JDK给了我们一个好的说法:size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行

但是如果insert等改变列表长度的行为(非表头),随着数据增长急速变慢

LinkedList: 优势为改变列表的行为,随着数据量增长,查询如get方法会急速变慢

 

一些小知识:

1.貌似List没有排序?

  不妨看看Collections.sort();还可以乱序 Collections.shuffle();

2.LinkedList很让人迷惑。

  我也这么觉得。。,但记着你想让他是List就是List,想让他是Queue就是Queue

3.Vector被遗忘了

  他是基于容器java1.0/1.1而写,效率上基本与ArrayList相同,而且线程安全,听着完美无缺。但安全方面可以通过Collections.synchronizedList(List<T> list) 来解决。他有着很多缺点,他正在被淘汰,尝试不要再用他。不要因那些老的面试题而太在意他。

4.双向队列

  试图打破队列先进先出的概念吧。这个神奇LinkedList作祟,你可以再队列的任何一段添加删除元素,甚至令人唾弃的java.uitl.Stack,都可以用LinkedList取代。

 

补充性小结:

1. 看看Collection,Collections里方法。

2. UnsupportedOperationException 如果你遇到了,说明这个列表长度固定了

3. java.util.ConcurrentModificationException 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。例如:删除子列表的时候,list.removeAll(Collection c);