Java HashMap已存在的值是否覆盖

源代码如下

if (e != null) { // existing mapping for key
    V 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,因此,无论值是否为空,都会覆盖更新。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐