看看Map接口

真是一個你們族,繼承的子接口一串,實現的類也比比皆是,固然不少都沒有用過,不知道實際開發過程當中,那些大神是怎麼使用的。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

相關文章
相關標籤/搜索