Map------------------key/value鍵值對
HashMap : 實現了hash算法。底層是一個數組Entry<K,V>[] table, 這個table每一個位置存放一個Entry,每一個Entry至關於一個桶,經過hash算法特定的數據會放到一個桶內。取值時,經過hash算法獲得對象存放的位置,即數組的下標,而後再從這個桶內循環查找,直到找到與key相同的值。
LinkedHashMap :繼承於hashmap,與hashmap的存取方式是同樣的。可是linkedhashmap的Entry類額外增長了兩個字段
Entry<K,V> before , after ;一個頭結點
private
transient Entry<K,V> header;
用header當頭結點,結合before和after屬性造成一個環形雙向鏈表。每當加入一個key/value到集合中時,會把這個對象放到鏈表中的最前端(header的after端)。當循環集合時從鏈表的最後端(header的before端)開始遍歷,這樣遍歷出來的結果就保證了是按插入的順序遍歷的。
TreeMap : 實現的是紅黑樹算法。按照排序二叉樹的規則添加對象節點,按照紅黑樹的規則修正二叉樹的高度使根節點兩邊的高度能達到平衡。TreeMap遍歷出來的對象是排好序的。
Set------------------ 是沒有重複對象的集合。
HashSet: 持有一個HashMap的臨時對象,用HashMap的key當作對象存儲,全部的value值都是一樣的一個不變的對象。HashSet是經過HashMap的key不能重複來保證沒有重複的對象。
LinkedHashSet:繼承於
HashSet,但持有的是一個LinkedHashMap對象。保證沒有重複對象的同時也保證了能按插入順序取出集合中的對象。
TreeSet
:持有一個TreeMap對象。保證沒有重複對象的同時,也保證了能按必定的排序取出集合中的對象。
List------------------位置性集合。加進清單的元素能夠加在清單中特定位置或加到末尾
ArrayList : 底層是一個數組對象,經過必定的規則來擴容。插入和刪除比較耗性能,每次插入或刪除一個對象都會致使不少對象的移動。可是取對象速度很快。 前端
Vector:
與ArrayList相差不大,只是vector是線程安全的。
LinkedList : 用內部內Node<E>對象造成一個雙向鏈表,有頭指針first和尾指針last。插入或刪除只須要改變引用的節點因此速度很快。可是查找速度很慢,須要一個個節點的遍歷。