Java中的經常使用Map:HashMap、Hashtable、LinkedHashMap、Tre...

Java自帶了各類Map類,可歸爲三種類型: html

1.通用Map,用於在應用程序中管理映射,一般在 java.util 程序包中實現 java

  • HashMap
  • Hashtable
  • Properties
  • LinkedHashMap
  • IdentityHashMap
  • TreeMap
  • WeakHashMap
  • ConcurrentHashMap

2.專用 Map,您一般沒必要親自建立此類 Map,而是經過某些其餘類對其進行訪問 oracle

  • java.util.jar.Attributes
  • javax.print.attribute.standard.PrinterStateReasons
  • java.security.Provider
  • java.awt.RenderingHints
  • javax.swing.UIDefaults

3.一個用於幫助實現您本身的 Map 類的抽象類 ide

  • AbstractMap

咱們今天主要來認識java.util包中的HashMap、Hashtable、LinkedHashMap、TreeMap。 spa

Hashmap: 線程

  • 最經常使用的Map
  • 根據鍵的HashCode值存儲數據,根據鍵能夠直接獲取它的值,具備很快的訪問速度
  • 遍歷時取得數據的順序是徹底隨機的
  • 最多隻容許一條記錄的鍵爲Null,容許多條記錄的值爲 Null
  • 不支持線程的同步,即任一時刻能夠有多個線程同時寫HashMap,可能會致使數據的不一致
  • 使用用 Collections的synchronizedMap方法使HashMap具備同步的能力,或者使用ConcurrentHashMap

Hashtable: htm

  • 與 HashMap相似
  • 它繼承自Dictionary類
  • 不容許記錄的鍵或者值爲空
  • 支持線程的同步,即任一時刻只有一個線程能寫Hashtable
  • 線程同步致使Hashtable在寫入時會比較慢

LinkedHashMap: 排序

  • HashMap的一個子類
  • 保存了記錄的插入順序
  • 先進先出,遍歷時先獲得的記錄是先插入的,能夠在構造時用帶參數,按照應用次數排序
  • 在遍歷的時候會比HashMap慢。
  • 例外狀況,當HashMap容量很大,實際數據較少時,遍歷起來可能會比 LinkedHashMap慢,由於LinkedHashMap的遍歷速度只和實際數據有關,和容量無關,而HashMap的遍歷速度和他的容量有關

TreeMap: 繼承

  • 實現SortMap接口
  • 默認是按鍵值的升序排序,也能夠指定排序的比較器
  • 當用Iterator 遍歷TreeMap時,獲得的記錄是排過序的

 

總結: 接口

  • 用的最多的是HashMap,在Map 中插入、刪除和定位元素,HashMap 是最好的選擇
  • 按天然順序或自定義順序遍歷鍵,那麼TreeMap會更好
  • 出的順序和輸入的相同,那麼用LinkedHashMap 能夠實現,能夠按讀取順序來排列

 

參考:

相關文章
相關標籤/搜索