共同学习Java源代码-数据结构-HashMap(十一)

本文深入解析了HashMap中几个关键方法的实现原理,包括getOrDefault、putIfAbsent、remove、replace等方法,通过代码示例详细介绍了这些方法如何工作以及它们在键值对操作中的具体应用。
    @Override
    public V getOrDefault(Object key, V defaultValue) {
        Node<K,V> e;
        return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;

    }

这个方法是获取值且在没有取到值的时候,返回默认值的方法

实现很简单 就是先将key的哈希值和key本身传入getNode方法 判断返回值是否为空 如果为空就返回参数的默认值 否则就返回方法返回值


    @Override
    public V putIfAbsent(K key, V value) {
        return putVal(hash(key), key, value, true, true);
    }
这个方法是put方法的变种 就是在键不存在的时候 才会添加进键值对 具体的实现就是调用putVal方法 将onlyIfAbsent参数设为true即可



    @Override
    public boolean remove(Object key, Object value) {
        return removeNode(hash(key), key, value, true, true) != null;
    }

这个方法是删除键值对的方法 在键和值都匹配的情况下 才会删除 调用的是removeNode方法


    @Override
    public boolean replace(K key, V oldValue, V newValue) {
        Node<K,V> e; V v;
        if ((e = getNode(hash(key), key)) != null &&
            ((v = e.value) == oldValue || (v != null && v.equals(oldValue)))) {
            e.value = newValue;
            afterNodeAccess(e);
            return true;
        }
        return false;
    }

这个方法是将键值对的值替换为新值的方法

首先判断键是否存在 且键对应的值和参数传进来的值是否一致 如果都成立 就将键的值赋为新值并返回true afterNodeAccess方法为空实现

如果不成立 就返回false


    @Override
    public V replace(K key, V value) {
        Node<K,V> e;
        if ((e = getNode(hash(key), key)) != null) {
            V oldValue = e.value;
            e.value = value;
            afterNodeAccess(e);
            return oldValue;
        }
        return null;
    }

这个方法和上面的类似 只是不需要判断键对应的值和参数传进来的值是否一致 直接覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值