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情境。