gpt4 book ai didi

java - ConcurrentMap.putIfAbsent() 中提到的先前值是多少

转载 作者:行者123 更新时间:2023-11-30 06:12:27 24 4
gpt4 key购买 nike

ConcurrentMap 指定putIfAbsent() 的返回值为:

the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)

并给出以下代码作为例子。

if (!map.containsKey(key))
return map.put(key, value);
else
return map.get(key);
}

问题是,如果 map.put(key, value) 仅在映射中不存在具有给定键的条目时才被调用,那么怎么会有先前的值呢?在我看来,如果在调用 putIfAbsent() 之前不存在具有给定键的条目,它将始终返回当前值或 null。

最佳答案

考虑以下几行:

ConcurrentMap<String, String> map = new ConcurrentHashMap<>();
System.out.println(map.putIfAbsent("key", "value1")); // prints null (no previous value)
System.out.println(map.putIfAbsent("key", "value2")); // prints "value1"

在第一次调用 putIfAbsent 时,没有与键 key 关联的值。因此,putIfAbsent 将按照记录返回 null

在第二次调用时,putIfAbsent 将返回之前的映射,即 value1 并且该值不会在映射中更新,因为它已经存在。

虽然 putIfAbsent 确实总是返回当前值(如果存在该键的映射),但此处引入“先前值”的概念是为了与 Map.put 的定义保持一致,它返回以前的值。引用其 Javadoc:

the previous value associated with key, or null if there was no mapping for key.

关于java - ConcurrentMap.putIfAbsent() 中提到的先前值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32866120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com