真是一个你们族,继承的子接口一串,实现的类也比比皆是,固然不少都没有用过,不知道实际开发过程当中,那些大神是怎么使用的。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