ArrayList,Vector,LinkedList,HashSet,LinkedHashSet,TreeSet比較
List是一種有序的Collection, 元素可以重複
ArrayList是實現了基於動態陣列的資料結構,使用可增長的長陣列實現的.(擴容增加50%,不可以設定,預設空間10)
LinkedList基於連結串列的資料結構,使用雙鏈表實現的,對於隨機訪問,ArrayList優於LinkedList,因為LinkedList需要移動指標,對於新增和刪除LinkedList佔優勢,因為ArrayList需要移動資料.
Vector 是執行緒安全的,原始碼中有很多的synchronized,(擴容增加一倍,可以設定,預設空間10),效率相對低
Set不允許包含相同元素,如果是兩個物件根據equals方法進行判斷
HashSet:不能保證元素的排列順序,不是同步的,集合元素可以是
LinkedHashSet同樣根據hashCode值來決定元素儲存位置,但同時使用連結串列維護元素的次序,迭代訪問時候效能優於HashSet,但插入時效能弱與HashSet
TreeSet是SortedSet介面的唯一實現類,可以確保集合處於排序狀態.預設排序方式:從小到大,可以定製排序,需要實現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值