如何更新一个值,给定一个java hashmap中的键?
假设我们在Java中有一个HashMap<String, Integer>
。
如何更新(增加)字符串键的整数值,以查找每个存在的字符串?
人们可以移除并重新进场,但是开销会是一个问题。
另一种方法是只把新的一对,旧的将被替换。
在后一种情况下,如果发生与我尝试插入的新密钥相冲突的hashcode会发生什么情况? 散列表的正确行为是为它指定一个不同的位置,或者在当前存储区中创建一个列表。
map.put(key, map.get(key) + 1);
应该没事。 它将更新现有映射的值。 请注意,这使用自动装箱。
Java 8方式:
您可以使用computeIfPresent
方法并为其提供一个映射函数,该函数将根据现有函数调用一个新值。
例如,
Map<String, Integer> words = new HashMap<>();
words.put("hello", 3);
words.put("world", 4);
words.computeIfPresent("hello", (k, v) -> v + 1);
System.out.println(words.get("hello"));
或者,您可以使用merge
方法,其中1是默认值,函数将现有值增加1:
words.merge("hello", 1, Integer::sum);
另外,还有一些其他有用的方法,比如putIfAbsent
, getOrDefault
, forEach
等。
hashmap.put(key, hashmap.get(key) + 1);
方法put
将替换现有密钥的值,并在不存在时创建它。