为什么 Map.putIfAbsent() 返回 null?

2022-09-01 13:35:33

以下程序正在打印。我不明白为什么。null

public class ConcurrentHashMapTest {
    public static final Map<String, String> map = new ConcurrentHashMap<>(5, 0.9f, 2);

    public static void main(String[] args) {
        map.putIfAbsent("key 1", "value 1");
        map.putIfAbsent("key 2", "value 2");

        String value = get("key 3");
        System.out.println("value for key 3 --> " + value);
    }

    private static String get(final String key) {
        return map.putIfAbsent(key, "value 3");
    }
}

有人可以帮助我理解这种行为吗?


答案 1

问题是,根据定义 putIfAbsent 返回旧值而不是新值(缺少的旧值始终为 null)。使用 computeIfAbsent - 这将为您返回新值。

private static String get(final String key) {
    return map.computeIfAbsent(key, s -> "value 3");
}

答案 2

ConcurrentMap.putIfAbsent返回与指定键关联的上一个值,如果键没有映射,则返回 null。您没有与“密钥 3”关联的值。全部正确。

注意:不仅适用于 ,这适用于 的所有实现。ConcurrentMapMap