java map源码详解_源码解析JDK 1.8 中的 Map.merge()

Map 中ConcurrentHashMap是线程安全的,但不是所有操作都是,例如get()之后再put()就不是了,这时使用merge()确保没有更新会丢失。

因为Map.merge()意味着我们可以原子地执行插入或更新操作,它是线程安全的。

一、源码解析

default V merge(K key, V value, BiFunction super V, ? super V, ? extends V> remappingFunction) {

Objects.requireNonNull(remappingFunction);

Objects.requireNonNull(value);

V oldValue = get(key);

V newValue = (oldValue == null) ? value :

remappingFunction.apply(oldValue, value);

if(newValue == null) {

remove(key);

} else {

put(key, newValue);

}

return newValue;

}

该方法接收三个参数,一个 key 值,一个 value,一个 remappingFunction 。如果给定的key不存在,它就变成了put(key, value);但是,如果key已经存在一些值,我们 remappingFunction 可以选择合并的方式:

只返回新值即可覆盖旧值: (old, new) -> new;

只需返回旧值即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值