20-Map

类简介

Map是一个保存“键值对”的对象。所以:

  1. “键”也就是key不能重复
  2. 一个“键”对应一个值

Map接口提供了三种进行遍历的方法:

  1. 获得一个keyIterator

  2. 获得一个valueCollection

  3. 获得一个关于EntryIterator,其中EntryMap的内部类

当然,如果Map中的元素是有顺序的,返回的结果也会有顺序。

Mapkey不能引自己,但是value可以。

还有,Map尽量不要把容易改变的对象作为key

Iterator,Collection一样,要提供两个构造方法,后面的不再详述。

改变结构的方法,比如增删改,可能会抛UnsupportedOperationException异常。

添加或者修改的数据如果非法可能会抛异常。

Map中的很多和查找有关的方法都是依赖key或者valueequals()方法,所以记得根据自己的需求重写Objectequals()

类源码简介

MapK表示key,V表示value

方法

int size();

boolean isEmpty();

boolean containsKey(Object key);

boolean containsValue(Object value);

V get(Object key);

V put(K key, V value);

put和http请求的那个put差不多,是修改的意思,返回的是老的value,如果返回空表示

  1. 修改失败
  2. map支持null且原来的值是null

V remove(Object key);

void putAll(Map m);

void clear();

Set keySet();

返回一个以集合中所有的key作为元素的Set

注意:

Map中对key的修改会影响到这个Set

举个栗子:

我先得到了一个Set A,然后遍历Set A时,有人对Map做了增删(总之是一切能影响到key的操作),这样在遍历Set A时会出现失败或者其他的情况。(Collection在遍历时不允许修改元素)

Collection values();

  1. 见名知意
  2. 该注意的和上边的一样

Set> entrySet();

  1. 同上一个接口
  2. 关于Entry的介绍看下边

boolean equals(Object o);

int hashCode();

default V getOrDefault(Object key, V defaultValue)

get()方法做了一个包装,get()发现key不存在时返回null,这个返回传入的defaultValue

default void forEach(BiConsumer action)

对每个元素调用传入的action()方法,关于函数式接口我们后面专门记录。

default void replaceAll(BiFunction function)

对泛型的解释如下:

  1. BiFunction function)我们设为BiFunction function)
  2. 则该方法等同C function(A,B)
  3. 考虑到逻辑,可以表示为newValue function(key,OldValue)
  4. 我们知道java的一种上转型规律,即A = B,则A属性是B或者B的父类
  5. 因为oldValue属性是V,则B=V,所以B属性应该是V或者V的父类,所以B? super V
  6. 因为newValue属性是V,返回的结果是V,则V=C,所以C属性应该是V或者V的子类,所以C? extends V

default V putIfAbsent(K key, V value)

如果没有或者存在但是valuenull就执行put操作

default boolean remove(Object key, Object value)

default boolean replace(K key, V oldValue, V newValue)

default V replace(K key, V value)

default V computeIfAbsent(K key,Function mappingFunction)

如果没有或者存在但是valuenull【调用get()返回null】就调用函数mappingFunction()

default V computeIfPresent(K key,BiFunction remappingFunction)

如果调用get()返回不是null,则调用remappingFunction()方法计算

default V compute(K key,BiFunction remappingFunction)

keykey的映射调用方法remappingFunction()

default V merge(K key, V value,BiFunction remappingFunction)

oldValue和传入的value进行合并,如果oldValue==null则取值value,负责调用remappingFunction()获得新值。值结果为空则移除映射,否则设置新值。

内部类 Entry

K getKey();

V getValue();

V setValue(V value);

boolean equals(Object o);

int hashCode();

public static , V> Comparator> comparingByKey();

返回一个Comparator用来比较。凑,我先看那个吧,这个看不下去了。后面再完善这部分。

public static > Comparator> comparingByValue()

public static Comparator> comparingByKey(Comparator cmp)

public static Comparator> comparingByValue(Comparator cmp)

你可能感兴趣的:(20-Map)