前言
java為數據結構中的映射定義了一個接口java.util.Map,有五個實現類:HashMap、LinkedHashMap、HashTable、TreeMap、ConcurrentHashMap
1.HashMap
最常用的Map,根據鍵的hashcode值來存儲數據(采用鏈地址法,也就是數組+鏈表+紅黑樹的方式),根據鍵可以快速獲得它的值(因為相同的鍵hashcode值相同,在地址為hashcode值的地方存儲的就是值,所以根據鍵可以很快獲得值。即使鍵值不同而hashcode值相同,也能快速找到對應hashcode的鏈表,從而通過遍歷快速找到值)。
HashMap最多只允許一條記錄的鍵為null,HashMap不支持線程同步,即任意時刻可以有多個線程同時寫。
2.HashTable(基本已被淘汰)
HashTable的操作幾乎和HashMap一致,主要的區別在於HashTable為了實現多線程安全,在幾乎所有的方法上都加了synchronized鎖,而加鎖的結果就是Hashtable操作的效率十分低下。
3.LinkedHashMap
LinkedHashMap是HashMap的一個子類,但它保持了記錄的插入順序(內部維護了一個雙向鏈表),遍歷時會通過鏈來遍歷。
4.TreeMap
實現了SortMap接口,能夠把保存的記錄按照鍵排序(默認升序),也可以指定排序比較器,遍歷時得到的數據是排過序的,底層用紅黑樹實現
5.ConcurrentHashMap
ConcurrentHashMap是一個並發散列映射表的實現,它允許完全並發的讀取,並且支持給定數量的並發更新。相比於HashTable和同步包裝器包裝的HashMap,要快很多。因為這兩者采用的是一個全局所來同步不同線程間的並發訪問,使得訪問變成串行的了