携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
一、put()与putIfAbsent()
1、put方法:返回旧值,如果没有则返回null
V put(K key, V value);
2、putIfAbsent方法:putIfAbsent返回旧值,如果没有则返回null; 先计算value,再判断key是否存在
V putIfAbsent(K key, V value);
3、区别:
<1.使用put方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则会覆盖旧值,value为新的值。
<2.使用putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则依旧为原来的值。
二、compute()和computeIfAbsent()
1、compute方法
V compute(K key, BiFunction remappingFunction)
相当于put方法,不过返回的是新值。当key不存在时,执行value计算方法,计算value
map.compute("MGJJ", (k, v) -> {
if (v == null) {
v = 1;
} else {
v += 1;
}
return v;
});
2、computeIfAbsent()
V computeIfAbsent(K, Function<? super K, ? extends V>)
computeIfAbsent:存在时返回存在的值,不存在时返回新值; 参数为:key, value计算方法: 当key不存在时,执行value计算方法,计算value值
map.computeIfAbsent("newPen", k -> 600);
三、computeIfPresent()和computeIfAbsent()
对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。
computeIfPresent() 方法的语法为:
map.computeIfPresent(K key, BiFunction remappingFunction)
参数说明
- key - 键
- remappingFunction - 重新映射函数,用于重新计算值
返回值
如果 key 对应的 value 不存在,则返回该 null(可能发送空指针异常);如果存在,则返回通过 remappingFunction 重新计算后的值。
区别:
map.computeIfAbsent() 就是只有当value不存在时候,才会运行function方法,return值为put的值。 map.computeIfPresent() 就是只有当value存在时候,才会运行function方法,return值为put的值。
四、getOrDefault()
V getOrDefault(Object, V)
这个方法同样检查 Map 中的 Key,如果发现 Key 不存在或者对应的值是 null,则返回第二个参数即默认值。要注意,这个默认值不会放入 Map。所以如果你这样写:
Map<String, List<String>> map = new HashMap<>();
map.getOrDefault("codedq", new ArrayList<>()).add("业余草");
执行完之后 map 仍然是空的!