之前講過了Collection類下的兩個主要容器:List和Set,今天我們來講講沒有繼承自Collection的容器:Map。
Map提供了一個更通用的元素存儲方法,Map提供了一個鍵值對的存儲方式,一個鍵映射到一個值。、
Map中的常用方法
返回類型 | 方法名(參數類型) |
---|---|
void |
clear()
從該地圖中刪除所有的映射(可選操作)。 |
boolean |
containsKey(Object key)
如果此映射包含指定鍵的映射,則返回 true 。 |
Set<Map.Entry<K,V>> |
entrySet()
返回此地圖中包含的映射的 |
boolean |
equals(Object o)
將指定的對象與此映射進行比較以獲得相等性 |
int |
hashCode()
返回此地圖的哈希碼值。 |
boolean |
isEmpty()
如果此地圖不包含鍵值映射,則返回 true 。 |
Set<K> |
keySet()
返回此地圖中包含的鍵的 |
V |
put(K key, V value)
將指定的值與該映射中的指定鍵相關聯(可選操作)。 |
void |
putAll(Map<? extends K,? extends V> m)
將指定地圖的所有映射覆制到此映射(可選操作)。 |
V |
remove(Object key)
如果存在(從可選的操作),從該地圖中刪除一個鍵的映射。 |
int |
size()
返回此地圖中鍵值映射的數量。 |
default V |
replace(K key, V value)
只有當目標映射到某個值時,才能替換指定鍵的條目。 |
default boolean |
replace(K key, V oldValue, V newValue)
僅噹噹前映射到指定的值時,才能替換指定鍵的條目。 |
Map中的常用類
我們來看看Map的結構圖
可以看出主要有三個實現類
- HashMap
- TreeMap
- WeakHashMap
- HashTable
HashMap
HashMap是最常用的Map,根據鍵的Hash值來存儲數據,具有很快的訪問速度。HashMap允許key、value爲null,HashMap是非同步的。
TreeMap
TreeMap的特點就是其值是有序的,默認按升序排序,也可以指定比較器。TreeMap不允許key爲null。TreeMap是非同步的。
WeakHashMap
WeakHashMap與HashMap基本一樣,區別在於其鍵的引用類型。WeakHashMap的鍵是弱引用(WeakReference)類型,採用弱引用類型的好處是方便GC(垃圾回收器)進行垃圾回收,即方便內存的釋放。
HashTable
與HashMap類似,但是HashTable不允許key和value的值爲null,HashTable是線程同步的。
ConcurrentHashMap
在這裏要特別提一下ConcurrentHashMap。HashMap是非同步的,雖然HashTable能解決HashMap的非同步問題,但是HashTable採用的是使用synchronized關鍵字進行線程同步,這樣做的效率很低。ConcurrentHashMap就是爲了解決線程同步但效率不高的問題。ConcurrentHashMap採用了分段鎖的機制,後續我們會對這個分段鎖詳細介紹。