雖是讀書筆記,可是如轉載請註明出處http://segmentfault.com/blog/exploring/
..拒絕伸手複製黨segmentfault
容器之間的區別一般歸結爲:由什麼在背後「支持」它們,即,所使用的接口是由什麼樣的數據結構實現的。數組
# 對 List 的 選擇:
ArrayList 和 LinkedList 基本的 List 操做是相同的。可是 ArrayList 底層是 數組實現的,LinkedList 是雙向鏈表實現的(其中每一個對象包含數據的同時還包含指向鏈表中前一個元素和後一個元素的應用)。
所以,若是常常在表中插入刪除應該使用 LinkedList,若是大量隨機訪問元素,應該使用ArrayList.安全
最佳的作法多是將 ArrayList 做爲默認首選,只有你須要使用額外的功能,或者當程序的性能由於常常插入和刪除變差的時候,纔去選擇LinkedList.數據結構
# 對 Set 的選擇
Set 能夠被實現爲 TreeSet, HashSet, LinkedHashSet. 能夠根據所須要的行爲來選擇不一樣的接口。性能
行爲: HashSet 最經常使用,特別添加和查詢元素的時候速度快;
LinkedHashSet 保持元素的插入順序; 插入操做,LinkedHashSet 比HashSet 代價更高,這是由維護鏈表所帶來額外開銷形成的。
TreeSet 基於TreeMap,1. 生成一個維持元素處於排序狀態的Set. 只有當須要一個排好序的 Set 時,才應該使用TreeSet. 由於其內部結構支持排序。 2. 用 TreeSet 迭代速度比 HashSet 速度快。線程
# 對 Map 的選擇
除了 IdentityHashMap, 全部的Map實現插入和刪除操做都會隨着Map尺寸的變大而明顯變慢。可是查找的代價要比插入小不少。code
Hashtable 的性能大致上與 HashMap 至關,由於HashMap 是用來替代 Hashtable 的,所以他們使用了相同的底層和查找機制。使用 Map 時候,第一選擇應該是hashmap.
LinkedHashMap 比 HashMap 慢, 代價更高,這是由維護散列結構的同時還要維護鏈表所帶來額外開銷形成的。
TreeMap 一般比 HashMap 慢。 與使用 TreeSet 同樣,TreeMap 是一種建立有序列表的方式。
IdentityHashMap 具備徹底不一樣的性能,由於它使用 == 而不是 equal() 來比較元素。對象
應該避免使用Vector,它只存在於支持遺留代碼的類庫中。blog
ArrayList 和 Vector 區別?
Vector 和 ArrayList 都是基於Object[] array 數組來實現的,根據索引來訪問元素。兩者最大的區別就是同步的使用。
Vector 中全部方法都是直接或者間接同步的,因此 Vector 是線程安全的(即多個線程操做同一個 vector 對象時是線程安全的),可是隻有一個線程操做時考慮到同步控制會耗費系統資源因此效率低。
ArrayList 中的全部方法都是線程非同步的,但有多個線程操做時是不安全的。排序