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
咱們今天主要來認識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 能夠實現,能夠按讀取順序來排列
參考: