java集合類比較

1. arraylist

  基於數組方式實現,無容量的限制。

  在執行插入元素時可能要擴容,在刪除元素時並不會減少數組的容量。

  如果希望相應的縮小數組容量,可以調用trimtosize()

  在查找元素時要遍歷數組,對於非null的元素採取equals的方式尋找。

  非線程安全。

2. linkedlist

  基於雙向鏈表機制實現。

  元素的插入、移動較快。

  非線程安全。

3. vector

  基於object數組的方式來實現的。

  基於synchronized實現的線程安全的arraylist。

  在插入元素時容量擴充的機制和arraylist稍有不同:
  如果capcacityincrement > 0, 則object數組的大小擴大爲現有size加上capcacityincrement;
  如果capcacityincrement < 0, 則object數組的大小擴大爲現有size的兩倍;

4. stack

  基於vector實現,支持lifo。

5. hashset

  基於hashmap實現,無容量限制。

  不允許元素重複。

  非線程安全。

6. treeset

  基於treemap實現,支持排序。

  非線程安全。

7. hashmap

  採用數組方式存儲key、value構成的entry對象,無容量限制。

  基於key hash尋找entry對象存放到數組的位置,對於hash衝突採用鏈表的方式來解決。

  在插入元素時可能會擴大數組的容量,在擴大容量時會重新計算hash,並複製對象到新的數組中。

  非線程安全。

8. treemap

  基於紅黑樹實現,無容量限制。

  非線程安全。

-----------------------------------
適用場景:

  對於查找和刪除較爲頻繁,且元素數量較多的應用,set或map是更好的選擇;

  arraylist適用於通過爲位置來讀取元素的場景;

  linkedlist 適用於要頭尾操作或插入指定位置的場景;

  vector 適用於要線程安全的arraylist的場景;

  stack 適用於線程安全的lifo場景;

  hashset 適用於對排序沒有要求的非重複元素的存放;

  treeset 適用於要排序的非重複元素的存放;

  hashmap 適用於大部分key-value的存取場景;

  treemap 適用於需排序存放的key-value場景。

發佈了25 篇原創文章 · 獲贊 20 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章