Java HashMap已存在的值是否覆盖
Java HashMap已存在的值是否覆盖
源代码如下
if (e != null) { // existing mapping for keyV oldValue = e.value;if (!onlyIfAbsent || oldValue == null)e.value = value;afterNodeAccess(e);return oldValue;
}
前提是key在HashMap中已存在,且已有对应的Node;
从上述代码理解,当oldValue 为空时,无论onlyIfAbsent 是什么,都会重新覆盖旧值。
一种情况,非空时不更新旧值
onlyIfAbsent的作用如下:
public V putIfAbsent(K key, V value) {return putVal(hash(key), key, value, true, true);
}
变量更贴合方法 putIfAbsent
的定义:
- 如果key对应的旧值存在且不为空,不更新。
- 如果key对应的旧值为空,则覆盖更新。
其他的情况,都会覆盖更新
除此之外,其他的情况传递的onlyIfAbsent都是false,因此,无论值是否为空,都会覆盖更新。