Java 为什么hashmap的值不能用getOrDefault方法更新?

Java 为什么hashmap的值不能用getOrDefault方法更新?,java,Java,您想使用HashMap.computeIfAbsentgetOrDefault仅获取存在的值,否则返回默认值,而不添加该值 请参阅和要一次性完成,您必须使用: hmap.computeIfAbsent(key,k->newArrayList()).add(s); 阅读以下文档,即javadoc: 返回指定键映射到的值,如果此映射不包含键的映射,则返回defaultValue 如果找不到该键,它不会说明如何插入默认值 因此,如果找不到键,它会返回新列表,您可以向其中添加一个元素,但您还需要put(

您想使用
HashMap.computeIfAbsent
getOrDefault
仅获取存在的值,否则返回默认值,而不添加该值


请参阅和

要一次性完成,您必须使用:

hmap.computeIfAbsent(key,k->newArrayList()).add(s);

阅读以下文档,即javadoc:

返回指定键映射到的值,如果此映射不包含键的映射,则返回
defaultValue

如果找不到该键,它不会说明如何插入默认值

因此,如果找不到键,它会返回新列表,您可以向其中添加一个元素,但您还需要
put()
将新列表放入映射中。如果找到了钥匙,那么再放一次不会有什么坏处(除了性能)

但是,正确的方法是使用,原因有二:

  • 它将为您列出新的列表

  • 如果该键存在,它不会创建一个列表来再次丢弃它

hmap.computeIfAbsent(key,k->newArrayList())
.添加(s);

这个假设是错误的:我正在用ArrayList的一个新实例映射key。我认为方法的名称
getOrDefault
非常清楚地说明了不
put
ting任何地方。
List<String> list = hmap.getOrDefault(key,new ArrayList<String>());
list.add(s);
hmap.put(key,list);
List<String> list = hmap.getOrDefault(key,new ArrayList<String>());
hmap.put(key,list);
hmap.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
hmap.computeIfAbsent(key, k -> new ArrayList<>())
    .add(s);