1. 程式人生 > >ArrayList,Vector,LinkedList,HashSet,LinkedHashSet,TreeSet比較

ArrayList,Vector,LinkedList,HashSet,LinkedHashSet,TreeSet比較

List是一種有序的Collection, 元素可以重複

ArrayList是實現了基於動態陣列的資料結構,使用可增長的長陣列實現的.擴容增加50%,不可以設定,預設空間10

LinkedList基於連結串列的資料結構,使用雙鏈表實現的,對於隨機訪問,ArrayList優於LinkedList,因為LinkedList需要移動指標,對於新增和刪除LinkedList佔優勢,因為ArrayList需要移動資料.

Vector 是執行緒安全的,原始碼中有很多的synchronized,(擴容增加一倍,可以設定,預設空間10),效率相對低

Set不允許包含相同元素,如果是兩個物件根據equals方法進行判斷

HashSet:不能保證元素的排列順序,不是同步的,集合元素可以是

null但只能放入一個null.(內部是一個hashMap儲存,具體邏輯:先獲得物件hashCode(),然後根據其值決定物件在bucket中的儲存位置)

LinkedHashSet同樣根據hashCode值來決定元素儲存位置,但同時使用連結串列維護元素的次序,迭代訪問時候效能優於HashSet,但插入時效能弱與HashSet

TreeSetSortedSet介面的唯一實現類,可以確保集合處於排序狀態.預設排序方式:從小到大,可以定製排序,需要實現Comparator介面,實現compare方法

HashMap  允許key, value為null, 且key為null的只有一個

HashTable ConcurrentHashMap 不允許 key和value為null,  因為他們是支援高併發的,再併發情況下,get( key) 時,無法判段是 set進去的null值,還是沒有這個key,  如果,通過contains(key)判斷,判斷完再呼叫get,map的資料情況有可能已經發生變化。

TreeMap (基於紅黑樹,排過序)不允許key為null, 允許 value為null,因為再put時,呼叫了 compare進行 null值檢查

HashSet 底層使用的HashMap實現的,add( value) 使用 map.put(value, new Object()); 故:可以為null值