computeifAbsent()方法是对hashMap中指定的key的值进行重新计算,如果不存在这个key,则添加到hashMap中。
代码示例:
当hashMap中不存在对应的key时
public static void main(String[] args) {
HashMap<String, Integer> hashMap=new HashMap<>();
hashMap.put("a", 10);
hashMap.put("b", 20);
System.out.println("computeIfAbsent 方法之前"+hashMap);
Integer computeIfAbsent = hashMap.computeIfAbsent("c", key->30);
System.out.println("computeIfAbsent:"+computeIfAbsent);
System.out.println("computeIfAbsent 方法之后"+hashMap);
}
结果:
computeIfAbsent 方法之前{a=10, b=20}
computeIfAbsent:30
computeIfAbsent 方法之后{a=10, b=20, c=30}
结果可以看出,当HashMap中不存在对应的key时,在使用computeIfAbsent()方法是,会根据key后的表达式对key对应的value进行计算,并把key-value这个键值对,保存到map中。
代码示例:
当hashMap中存在对应的key时
public static void main(String[] args) {
HashMap<String, Integer> hashMap=new HashMap<>();
hashMap.put("a", 10);
hashMap.put("b", 20);
System.out.println("computeIfAbsent 方法之前"+hashMap);
Integer computeIfAbsent = hashMap.computeIfAbsent("a", key->30);
System.out.println("computeIfAbsent:"+computeIfAbsent);
System.out.println("computeIfAbsent 方法之后"+hashMap);
}
结果:
computeIfAbsent 方法之前{a=10, b=20}
computeIfAbsent:10
computeIfAbsent 方法之后{a=10, b=20}
结果可以看出,map中存在key是,是不会对value进行重新计算的,方法返回的是key原来对应的值。
代码示例:
当hashMap中的value是集合时,有对应的key
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("a");
HashMap<String, List<String>> hashMap=new HashMap<>();
hashMap.put("a", list);
System.out.println("computeIfAbsent 方法之前"+hashMap);
List<String> computeIfAbsent = hashMap.computeIfAbsent("a", key->new ArrayList<>());
System.out.println("computeIfAbsent:"+computeIfAbsent);
hashMap.computeIfAbsent("a", key->new ArrayList<>()).add("lili");
System.out.println("computeIfAbsent 方法之后"+hashMap);
}
结果:
computeIfAbsent 方法之前{a=[a]}
computeIfAbsent:[a]
computeIfAbsent 方法之后{a=[a, lili]}
结果可以看到,hashMap.computeIfAbsent("a", key->new ArrayList<>());的意思是存在key为a的键值,返回value值,
hashMap.computeIfAbsent("a", key->new ArrayList<>()).add("lili");存在key为a的键值,并向对应的value,list集合中添加“lili”
代码示例:
当hashMap中的value是集合时,没对应的key
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("a");
HashMap<String, List<String>> hashMap=new HashMap<>();
hashMap.put("a", list);
System.out.println("computeIfAbsent 方法之前"+hashMap);
List<String> computeIfAbsent = hashMap.computeIfAbsent("b", key->new ArrayList<>());
System.out.println("computeIfAbsent:"+computeIfAbsent);
hashMap.computeIfAbsent("b", key->new ArrayList<>()).add("bibi");
System.out.println("computeIfAbsent 方法之后"+hashMap);
}
computeIfAbsent 方法之前{a=[a]}
computeIfAbsent:[]
computeIfAbsent 方法之后{a=[a], b=[bibi]}
不存在时,会创建一list集合,把“bibi”放入list集合,然后以键值对的形式存入到map中