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

来源:互联网 发布:天猫是淘宝旗下的吗 编辑:程序博客网 时间:2024/06/10 22:23
    @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;
    }

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

阅读全文
0 0