本文主要為Java中Map集合的概述搪缨,至于具體類的實現(xiàn),未作詳細講解涡扼,具體實現(xiàn)原理可參看相關鏈接以及JDK源碼
[TOC]
1. Map
集合
java為數(shù)據(jù)結構中的映射定義了一個接口
java.util.Map
;它有四個實現(xiàn)類,分別是HashMap
苛吱、Hashtable
、LinkedHashMap
和TreeMap
Map
主要用于存儲健值對骤星,根據(jù)鍵得到值经瓷,因此不允許鍵重復(重復了覆蓋了),但允許值重復-
Map
架構
2. HashMap
- 最常用的
Map
- 根據(jù)鍵的
HashCode
值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度洞难,遍歷時舆吮,取得數(shù)據(jù)的順序是完全隨機的 -
HashMap
最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null
-
HashMap
不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap
;可能會導致數(shù)據(jù)的不一致。如果需要同步歪泳,可以用Collections
的synchronizedMap
方法使HashMap
具有同步的能力萝勤,或者使用ConcurrentHashMap
類 -
HashMap
的底層實現(xiàn)基于數(shù)組(動態(tài)可擴展)+鏈表(處理沖突)
3. Hashtable
- 它繼承自
Dictionary
類 - 它不允許記錄的鍵或者值為空
- 它支持線程的同步,
Hashtable
在寫入時會比較慢
4. LinkedHashMap
- 繼承
HashMap
呐伞,使用雙向鏈表來維護key-value
的次序敌卓,迭代順序與插入的順序保持一致 - 迭代訪問性能更好
5. TreeMap
- 實現(xiàn)
SortMap
接口 -
紅黑樹
數(shù)據(jù)結構,每個key-value
對即作為一個紅黑樹節(jié)點伶氢,根據(jù)key
排序趟径,默認是按鍵值的升序排序
6. 其他
- 再次強調(diào),
Set
與Map
的關系十分密切癣防,Java
源碼就是先實現(xiàn)了HashMap
蜗巧,TreeMap
等集合,然后通過包裝一個所有value
都為null
的Map
集合實現(xiàn)Set集合類