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);