如何在哈希图中给定一个键来更新值?

2022-08-31 04:06:37

假设我们在 Java 中有一个。HashMap<String, Integer>

如何更新(递增)我找到的字符串的每个存在的字符串键的整数值?

可以删除并重新输入该对,但开销将是一个问题。
另一种方法是只放置新对,旧对将被替换。

在后一种情况下,如果哈希码与我试图插入的新密钥发生冲突,会发生什么情况?哈希表的正确行为是为它分配一个不同的位置,或者在当前存储桶中从中列出一个列表。


答案 1
map.put(key, map.get(key) + 1);

应该没问题。它将更新现有映射的值。请注意,这使用自动装箱。在我们的帮助下,我们获得了相应密钥的值,然后您可以根据自己的要求进行更新。在这里,我更新为将值递增1。map.get(key)


答案 2

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

或者,您可以使用方法,其中 1 是默认值,函数将现有值递增 1:merge

words.merge("hello", 1, Integer::sum);

此外,还有许多其他有用的方法,例如 、、等。putIfAbsentgetOrDefaultforEach