HashMap,Hashset,ArrayList,LinkedList集合的區別
【HashSet】
1. HashSet不能夠儲存相同的元素,元素是否相同的判斷:重寫元素的equals方法。equals方法和hashCode方法必須相容,如:equals方法判斷的是使用者的名字name,那麼hashCode的返回的hashcode必須是name。hashcode();
2. HashSet儲存是無序的,儲存的順序與新增的順序是不一致的,它不是線性結構,而是雜湊結構,(通過散列表:雜湊單元指向連結串列)。因此,HashSet的查詢效率相對比較高。
3. HashSet不是執行緒安全的,不是執行緒同步的。這需要自己實現執行緒同步:
【ArrayList】
1. 不是執行緒安全的,不是執行緒同步的。
2.ArrayList是通過可變大小的陣列實現的,允許null在內的所有元素。
3.ArrayList中存放順序和新增順序是一致的。並且可重複元素。
4.ArrayList適合通過位子來讀取元素。
【LinkedList】
1.不是執行緒安全的,不是執行緒同步的。
2.LinkedList是通過雙向迴圈連結串列來實現的。
3.存放順序和新增順序是一致的。可新增重複元素。
4.適合連結串列頭尾操作和插入指定位置元素的操作。
ArrayList和LinkedList之間的資料傳遞可通過toArray()方法。
【HashMap】
1.非執行緒安全,不是執行緒同步。
2.新增順序和儲存的順序是不一致的。
3.必須重寫key的equals方法和hashCode方法。
4.HashMap的實際容量=容量*因子,預設為16*0.75=12.所以考慮到HashMap的新增的效率問題,根據實際情況來設計它的開始的預設的容量。
的操作方法根據api來查詢。
5.新增的值中是允許有
【Hashtable】
1.是執行緒安全的,是執行緒同步的,在實現執行緒同步的時候是不需要手動來實現執行緒同步的。因此相對效率低。
2.新增的順序和儲存的順序是不一致的。
3.新增的值中是不允許有null值存在的。
底層原理
HashMap:HashMap實現了Map介面,底層使用的是Hash演算法儲存資料。HashMap將資料以鍵值對的方式儲存。
HashSet:HashSet實現了Set介面,底層也是用的是Hash演算法儲存資料。而且HashSet內部有HashMap型別的成員變數,方法也呼叫了HashMap的方法,儲存的時候只不過值為null.
ArrayList:ArrayList實現了List介面,底層使用的是陣列,儲存空間上是相鄰的,所以查詢起來會很方便,效率也會比LinkedList要高
LinkedList:實現了List介面,底層使用的是使用雙向連結串列的形式,儲存的資料在空間上很可能不相鄰,但是他們都有一個引用連在一起,所以增刪起來會很方便