1. 程式人生 > >Set,List, Map各自實現類的比較

Set,List, Map各自實現類的比較

介面

實現類

實現方式

特點

Set

HashSet

連結串列的陣列(雜湊表)

1、HashSet類按照雜湊演算法來存取集合中的物件,存取速度比較快

2、存入HashSet的物件必須定義hashCode()。

3、HashSet通常優於HashTree(插入、查詢)。只有當需要產生一個經過排序的序列,才用TreeSet。HashTree存在的唯一理由:能夠維護其內元素的排序狀態。

LinkedHashSet

連結串列,雜湊表

1、具有HashSet的查詢速度,且內部使用連結串列維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。

TreeSet

二叉樹

1、TreeSet類實現了SortedSet介面,能夠對集合中的物件進行排序。

2、使用它可以從Set中提取有序的序列

List

ArrayList

陣列

1、允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。

2、ListIterator只應該用來由後向前遍歷 ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。

3、每個ArrayList例項都有一個容量(Capacity),即用於儲存元素的陣列的大小。這個容量可隨著不斷新增新元素而自動增加,但是增長演算法並 沒有定義。當需要插入大量元素時,在插入前可以呼叫ensureCapacity方法來增加ArrayList的容量以提高插入效率。 

LinkedList

連結串列

在實現中採用連結串列資料結構。插入和刪除速度快,訪問速度慢。

Vector

陣列

Vector非常類似ArrayList,但是Vector是同步的。由Vector建立的Iterator,雖然和ArrayList建立的 Iterator是同一介面,但是,因為Vector是同步的,當一個Iterator被建立而且正在被使用,另一個執行緒改變了Vector的狀態(例如,新增或刪除了一些元素),這時呼叫Iterator的方法時將丟擲ConcurrentModificationException,因此必須捕獲該異常。

Map

HashMap

散列表

Map基於散列表的實現。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設定容量capacity和負載因子load factor,以調整容器的效能。

HashTable

"拉鍊法"實現雜湊表

1、Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

2、最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。

2、Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。

3、只有HashMap可以讓你將空值作為一個表的條目的key或value

LinkedHashMap

連結串列

類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用連結串列維護內部次序。

TreeMap

紅黑樹

1、檢視“鍵”或“鍵值對”時,它們會被排序(次序由Comparable或Comparator決定)。

2、TreeMap的特點在 於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

WeakHashMap

散列表

弱鍵(weak key)Map,Map中使用的物件也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個“鍵”,則此“鍵”可以被垃圾收集器回收。

IdentifyHashMap

散列表

使用==代替equals()對“鍵”作比較的hash map。專為解決特殊問題而設計