真是一個你們族,繼承的子接口一串,實現的類也比比皆是,固然不少都沒有用過,不知道實際開發過程當中,那些大神是怎麼使用的。Map實現將鍵映射到值的對象,並且不能包含重複的鍵,每一個鍵最多能夠映射一個值。若是Map能夠映射多個值,那麼又是什麼樣的場景呢?html
接口Map內部還有一個接口Entry,用來實現相應的功能,還有4個static方法。java
在實現上能夠取代了Dictionary類,這是一個抽象類,好比Hashtable就繼承了。api
Map接口提供了3個集合視圖,包括:keys的set集合; values的集合; key-value的set集合,這個用來遍歷Map提供途徑。oracle
Set<K> keySet(); 返回key的結合htm
Collection<V> values(); 返回value集合對象
Set<Map.Entry<K, V>> entrySet(); 返回 key-value集合blog
Map的順序定義爲迭代器返回其元素的順序。好比TreeMap類,對順序作出了特定的保證;其餘人好比HashMap類,沒有順序。繼承
int size();接口
boolean isEmpty();開發
boolean containsKey(Object key);
boolean containsValue(Object value);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V> m);
void clear();
boolean equals(Object o);
int hashCode();
以上Map集合的經常使用方法,在平常項目中是使用的比較多的,相應的實現就百花齊放了吧。
而後咱們看看java接口支持default方法以後添加的方法
default V getOrDefault(Object key, V defaultValue):能夠設置默認值,不存在或者值爲null
default void forEach(BiConsumer<? super K, ? super V> action)
default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
若是指定的鍵還沒有與值關聯(或映射爲null),則將其與給定值關聯並返回null,不然返回當前值。
固然還有一些設置爲了default方法,固然接口這麼寫了之後,能夠代替不少靜態類了,只是這樣會有「鑽石問題」嗎?
如今接口內還有一些static方法
of()方法建立不可變的Map對象,重載實現多種,最大支持10個key-value。
還有一種是經過Entry對象來實現,最終的Map真身實際上是ImmutableCollections.MapN<>
MapN裏面沒有對集合驚醒增長刪除改的操做,因此實現了不可變的功能。
參考:https://docs.oracle.com/javase/9/docs/api/java/util/Map.html