gpt4 book ai didi

java - 为什么 hashmap 的值没有通过 getOrDefault 方法更新?

转载 作者:行者123 更新时间:2023-12-02 08:48:43 25 4
gpt4 key购买 nike

List<String> list = hmap.getOrDefault(key,new ArrayList<String>());
list.add(s);
hmap.put(key,list);

为什么我需要再次使用hmap.put方法?

我的理解是这样的。

假设不存在现有的键值对。所以,与

List<String> list = hmap.getOrDefault(key,new ArrayList<String>());

我正在将键映射到 ArrayList 的新实例。

如果我向同一个实例添加一个字符串,那么 HashMap 也应该自动更新,对吗?键=>列表对象。如果我添加到列表对象,那么对象引用不应该改变,对吗?

为什么我需要再次使用 put 方法并执行此操作?

hmap.put(key,list);

最佳答案

阅读文档,即getOrDefault()的javadoc :

Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key.

它没有说明如果找不到 key 则插入默认值。

因此,如果未找到该键,它会返回该新列表,并向其中添加一个元素,但您还需要将该新列表 put() 放入映射中。如果找到了 key ,那么再次放置它不会有什么影响(性能除外)。

但是,正确的方法是使用 computeIfAbsent() ,有两个原因:

  • 它会为您放置新列表。

  • 如果该键存在,它不会创建一个列表只是为了再次丢弃它。

hmap.computeIfAbsent(key, k -> new ArrayList<>())
.add(s);

关于java - 为什么 hashmap 的值没有通过 getOrDefault 方法更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59536382/

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