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

标签 java

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/

相关文章:

Java在一个圆圈上找到点

java - Java代码检查事件时间戳记是否在工作日和工作时间从9:30 AM到4:00 PM

java - 模式匹配时排除某个模式位于另一个模式内部时

Java 平均水平及以上

java - Collection 内容从未在 Intellij IDEA 中更新警告

java - 即使没有在 return 语句中指定任何返回值,也会向调用者返回 true 值

java - 从txt文件构建n叉树

java - 在完成读取之前获取加载到 BufferReader 的总字节数

java - mapred-site.xml 中指定的参数是否会覆盖 hadoop 代码中给出的参数?

java - 门总和配置