HashMap (jdk1.8)computeIfPresent()方法注释

computeIfAbsent 是实现Map接口中的方法,功能如:

/*
    * computeIfPresent功能:给定的key在hashMap中存在时,执行BiFunction函数的apply()方法
    * 如果apply()返回值为null,则删除hashMap中的key节点,如果apply()返回值不为空,
    * 用apply()执行结果的值替换key原有的value;
    * 给定的key在hashMap中不存在时,直接返回null;
    * */

@Override
    public V computeIfPresent(K key,
                              BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
        if (remappingFunction == null)//如果自定义函数为空,抛出异常
            throw new NullPointerException();
        Node<K,V> e; V oldValue;//定义Node类型的节点e,V类型的对象oldValue
        int hash = hash(key);//算出给定key的hash值
        if ((e = getNode(hash, key)) != null &&
                (oldValue = e.value) != null) {  //如果用给定的key和hash在hashMap中找到相同的节点,
            int mc = modCount;//定义变量mc=记录hashMap修改次数;
            V v = remappingFunction.apply(key, oldValue);//执行自定义函数,函数执行结果为传入的 Lambda的执行结果,
                                                        //remappingFunction.apply()用法可参考我在computeIfAbsent方法中的mappingFunction注释
            if (mc != modCount) { throw new ConcurrentModificationException(); } ///如果modCount不等于mc,说明有其它线程修改这个hashMap,抛出异常
            if (v != null) { //说明自定义函数的执行结果不为空
                e.value = v; //把e节点原有的value替换为自定义删除的执行结果
                afterNodeAccess(e);//回调函数
                return v;//返回新value
            }
            else //如果自定义删除执行结果为空,则删除key节点
                removeNode(hash, key, null, false, true);
        }
        return null; //返回null
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值