1. 元素是否可以為null
除了hashtable外,vector,arraylist,linkedlist, treeset, hashset, hashmap,linkedhashmap,treemap 元素都可以為空
2. 是否線性安全
除hashtable,vecotr外,其他都不是執行緒安全的。在外部新增鎖的方法為 類似於
sortedset s = collections.synchronizedsortedset(new treeset(…));
3. 元素是否可以重複
3. 1 顯然實現list介面的都是可以重複的,而set元素都是不會重複。
3.2 對於map key是不可以重複的,value是可以重複的
4.元素是否有序
除treeset,treemap 都是有序的外,其他都是無序的,需要注意的是linkedhashmap,arraylist,linkedlist,vector能保證迭代的元素與新增的順序是一致。而hashmap,hashset 遍歷順序與新增順序不一致
5.底層實現原理
5.1 vector,arraylist底層就是陣列 。
5.2 基於內部類entry實現的
5.2.1 雜湊表 :hashmap ,hashset資料結構為 table [entry]。 entry 為內部類(主要屬性有next,value,key 其中next 屬性用於解決hash碰撞)需要注意的是 hashset 是基於hashmap 實現的,不同的是,hashset對於內部類entry 中的value屬性統一為靜態常量object,hashset中的元素就是entry的key。
5.2.2 雙向迴圈鍊錶:linkedhashmap,linkedlist。linkedhashmap繼承自hashmap,但不同的是linkedhashmap內部類entry多了before和after兩個屬性,用於指向前面和後面的元素,以保持雙向迴圈鍊錶。而linkedlist中內部類中entry屬性並沒有value,屬性e就相當於是key, 屬性previou相當於before ,屬性next相當於after。
5.2.3 紅黑二叉樹:treemap,treeset。treemap內部類entry與上面不同的屬性為left,right,parent,color,分別表示為左節點,右節點,父節點,顏色。根據這些屬性實現紅黑二叉樹。注意treeset是基於treemap實現,同hashset一樣,entry的value也是都為靜態常量object。
6.效能比較
6.1 vector與arraylist :由於vector是線性安全的,效率比arraylist差
6.2 list,set
6. 2.1 set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
6. 2.2 list:和陣列類似,list可以動態增長,查詢元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
6.3 map
3.1 hashmap:以空間換區時間,在hash碰撞率低的情況下,效率是非常高的
3.2 likedhashmap:按照新增順序儲存,可以按新增順序取出
3.3 treehashmap:排序性
7.適用場景
7.1 對於查詢和刪除較為頻繁,且元素數量較多的應用,set或map是更好的選擇
7.2 arraylist適用於通過位置來讀取元素的場景
7.3 linkedlist 適用於要頭尾操作或插入指定位置的場景,或者是要求元素先進先出,因為linkedlist 實也現了poll方法()。
7.4 vector 適用於要執行緒安全的arraylist的場景
7.5 hashset對排序沒有要求需要去重的場景
7.6 treeset 需要排序、元素不重複
7.7 hashmap 適用於大部分 key-value形式的儲存場景
7.8 linkedhashmap 要求遍歷順序與傳入順序有關 key-value場景
7.9 treemap 需要排序的 key-value場景
最後附上集合結構關係圖,畫得比較爛,勿噴!
Java集合框架總結
list集合要點總結 1.集合框架的最頂層為collection介面。2.集合裡存放的並不是物件的實體,而是物件實體的引用位址。3.集合可以通過迭代器 iterator 來遍歷元素,iterator 方法實際上是返回了集合中的乙個內部類例項,該內部類例項實現了iterator介面,並且可以直接訪問儲...
java總結(集合框架)
1 集合框架 collection and map,集合和對映,容器類 cpp 集合框架是為表示是為表示和操作集合而規定的一種統一的標準體系結構 在程式設計中容器是用來組織和儲存其他物件的物件 實現鍊錶的類就是乙個容器的例項 1 list 元素有先後次序的集合,元素有index位置 元素可以重複 繼...
Java集合框架的總結
1.陣列把物件和數字形式的下標聯絡起來。它持有的是型別確定的物件,這樣提取物件的時候就不用再作型別傳遞了。它可以是多維的,也可以持有primitive。但是建立之後它的容量不能改了。2.collection持有單個元素,而map持有相關聯的pair。3.和陣列一樣,list也把數字下標同物件聯絡起來...