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場景。