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;
}
这个方法和上面的类似 只是不需要判断键对应的值和参数传进来的值是否一致 直接覆盖
本文深入解析了HashMap中几个关键方法的实现原理,包括getOrDefault、putIfAbsent、remove、replace等方法,通过代码示例详细介绍了这些方法如何工作以及它们在键值对操作中的具体应用。

4523

被折叠的 条评论
为什么被折叠?



