Map集合
Map集合
Map集合用于保存映射关系的数据,Map集合中保存了两组值,一组是 key, 一组是 value。
Map的key不能重复。
key和value之间存在单向一对一的关系, 通过key,能找到唯一的,确定的value。
public interface Map<K,V> {
// Query Operations
}
Map的key放在一起来看,组成了一个Set集合,value又类似于一个List集合。
Map接口中定义了如下常用方法:
- clear():删除Map中所有的 key-value对
- containsKey():是否包含指定的key
- containsValue(): 是否包含一个或多个value。
- entrySet(): 返回包含的 key-value对组成的Set集合,每个集合元素都是Map.Entry对象, Entry是Map的内部类。
- get():返回指定key对应的value。
- isEmpty(): 是否为空
- keySet(): 返回key组成的Set集合
- put(): 添加一个key-value对,如果存在,覆盖以前的
- putAll(): 指定Map中复制过来
- remove():删除指定key,或 key-value。
- size():返回个数
- values():返回所有 value组成的 Collection。
JAVA 8 新增方法: - compute(): 根据第二个参数重新计算,并设置value
- computeIfAbsent(): 同上,value为 Null时计算
- computeIfPresent(): 同上, value不为Null时计算
- forEach(): 遍历Map
- merge(): value为null时,用传入的value覆盖,不为null时,重新计算覆盖
- putIfAbsent(): value为null时覆盖
- replace():key不存在时,不添加
- replaceAll(): 重新计算key-value, 覆盖value。
Map中包含一个内部接口 Entry。
封装了一个key-value对。包含下面方法。
- getKey(): 返回key
- getValue(): 返回value
- setValue(): 重新设置value
Map map = new HashMap();
map.put("A", 100);
map.put("B", 90);
map.put("C", 110);
System.out.println(map);
//D 不存在,不会改变
map.replace("D", 80);
System.out.println(map);
//重新计算A
map.merge("A", 20, (oldVal, newVal) -> (Integer)oldVal + (Integer) newVal);
System.out.println(map);
//遍历
map.forEach((key, value) -> System.out.println("key : " + key + " , value:" + value));
//D 不存在,不存在时计算
map.computeIfAbsent("D", (key) -> ((String) key).length());
System.out.println(map);
//D存在了, 存在计算
map.computeIfPresent("D", (key, value) -> ((String) key).length() * 10);
System.out.println(map);
//Output
{
A=100, B=90, C=110}
{
A=100, B=90, C=110}
{
A=120, B=90, C=110}
key : A , value:120
key : B , value:90
key : C , value:110
{
A