map是一個索引值對映射對象,一個map不能包含重複的key,每一個key都能唯一的映射到至多一個value.
這個介面替代了Dictonary類。map介面提供了三種集合視圖,它允許將map的內容視為一個鍵集合、值集合或者索引值映射集合。map的順序被定義為集合視圖的迭代器返回其元素的順序,有些map 介面的實現,比如TreeMap保證元素的有序性,其他的沒有這個保證。當可變對象被作為map的key的時候,需要注意,map中並沒有明確規定作為關鍵字的key對象發送改變並影響equals方法傳回值時該如何處理。所以盡量避免修改作為key的對象。所有通用的Map實作類別都應該提供兩個構造器:無參構造和只有一個Map參數的構造器,可以用來複製一個map.
有些Map介面的實作類別對包含的key和value有限制,比如說,不允許key和value為null,或者有的對key的類型有限制。如果試圖在map中插入一個不符合要求的資料,可能拋出null 指標異常或者類型轉換異常。如果在map中試圖查詢一個不存在的key或者value也可能拋出一個異常,或者只是返回一個false.
public interface Map<K,V> { // Query Operations int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); // Modification Operations V put(K key, V value); V remove(Object key); void putAll(Map<? extends K, ? extends V> m); void clear(); Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); interface Entry<K,V> { K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); } // Comparison and hashing boolean equals(Object o); int hashCode();}
int Size();
返回map中的索引值對數量,如果超過Integer.Max_Value,那麼就返回最大整型。
boolean isEmpty();
如果map中沒有索引值對,那麼返回true
boolean containsKey(Object k);
如果map中包含指定key的索引值對,那麼返回true,也就是說,如果返回true了,若且唯若map包含一個key是 k的索引值對,最多隻能有一個匹配。
boolean containsValue(Object v);
和containsKey類似,檢查map中是否包含一個值是v的索引值對映射,最多隻能有一個。
V get(Object key);
返回已key為map中key的value值,如果不存在這個key的映射關係,那麼返回null。更通用的說法,就是如果map中存在參數key的索引值對映射關係(key==null?k==null:key.equals(k))那麼就返回key的value值,否則返回null,這句話也就說明了,如果你的map中有一個key是null的映射,它也可以為你返回這個null對應的value值。
V put(K key, V value);
在map中建立一個key和一個value的映射關係。如果map以前已經存在了這個key的映射關係,那麼新的put會把原來的覆蓋掉。具體的實現看實作類別中的操作。
V remove(Object key); putAll(Map<? extends V>m); putAll(Map<? extends k,? extends V>m); clear(); 不做過多贅述了。
Set<K> keySet();
將map中的所有key已Set的形式返回。Set是基於Map的結構構件的。該集合set與map相關聯,map中的任何操作都會反映在set中,反之也是如此,如果在使用set的過程中修改了map中的值,後果未定。
Collection<V> values();
keyset返回的是map中key的集合,values返回的是map中value的集合。返回的Collection與當前map相關聯,map中的操作都會反映在Collection中,反之也是如此;如果在Collection使用過程中修改了map中的值,後果未定;
Set<Map.Entry<K,V>>entrySet();
返回當前map中所有映射集合Set<Map.Entry<K,V>>,同樣,與Map關聯,同步修改後果未定,支援刪除不支援添加