ArrayList 由數組構成的List object[] elementData 實際存儲的數組 int size 實際長度 int DEFAULT_CAPACITY = 10 初始容量10. 擴容過程:put的時候若是size+1>elementData.length,則對elementData擴容至1.5倍數組
LinkedList 由雙向鏈表構成的數組安全
Vector 由數組構成的線性安全的List 在每一個方法前加synchronized來保證安全。優化
保存KV對,K不可重複code
int DEFAULT_INITIAL_CAPACITY = 1 << 4
數組默認長度16 final float loadFactor; 負載因子,初始值0.75.當前數組長度 * loadFactor來判斷是否須要擴容。 int threshold ; The next size value at which to resize (capacity * load factor). 擴容過程:若是size+1 > threshold 則進行擴容,table長度擴大2倍。而後鏈表上的一一挪到正確的新的數組上。1.8之後HashMap下的鏈表進行優化了,改爲當鏈表的長度大於8的時候優化成紅黑樹。blog
ConcurrentHashMap 線性安全的,經過分段把鎖的粒度下降,提升效率ci
Hashtable 線性安全,經過方法前加上synchronized來鎖,效率較低。element
保存K HashMap<E,Object> map; public boolean add(E e) { return map.put(e, PRESENT)==null; }
HashSet內部實際是一個HashMap,把值做爲Key放入HashMap中。it