1. 程式人生 > >關於HashMap、HashTable、LinkHashMap、TreeMap的區別

關於HashMap、HashTable、LinkHashMap、TreeMap的區別

java為資料結構中的對映定義了一個介面java.util.Map;它有四個實現類,分別是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用於儲存健值對,根據鍵得到值,因此不允許鍵重複(重複了覆蓋了),但允許值重複。

HashMap是最常用的Map,它根據鍵的HashCode值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得資料的順序是完全隨機的。

HashMap:HashMap最多隻允許一條記錄的鍵為Null;允許多條記錄的值為 Null;HashMap不支援執行緒的同步,即任一時刻可以有多個執行緒同時寫HashMap;可能會導致資料的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable:Hashtable與 HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支援執行緒的同步,即任一時刻只有一個執行緒能寫Hashtable,因此也導致了 Hashtable在寫入時會比較慢。

HashMap與HashTable的區別:

HashMap與HashTable類似

  1. HashMap只允許一條記錄的鍵值為null,允許多條記錄的值為null;而HashTable不允許它的鍵和值為null.
  2. HashMap不支援執行緒的同步,HashTable支援執行緒的同步,所以在寫入時會比較慢。

LinkHashMap:LinkedHashMap 是HashMap的一個子類,儲存了記錄的插入順序.

LinkHashMap 與 HashMap的區別:

  1. LinkedHashMap的遍歷速度只和實際資料有關,和容量無關,而HashMap的遍歷速度和他的容量有關
  2. HashMap存取記錄的順序是無序的,LinkHashMap的存取記錄的順序是有序的。
  3. LinkHashMa通常比HashMap慢,特殊情況下,HashMap空間很大聲,資料很少,它的遍歷速度比LinkHashMap慢。

TreeMap:TreeMap實現SortMap介面,能夠把它儲存的記錄根據鍵排序,預設是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

總結:一般情況下,我們用的最多的是HashMap,在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那麼TreeMap會更好。如果需要輸出的順序和輸入的相同,那麼用LinkedHashMap 可以實現,它還可以按讀取順序來排列.