协慌网

登录 贡献 社区

给定哈希图中的键,如何更新值?

假设我们在 Java 中HashMap<String, Integer>

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

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

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

答案

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

应该没事。它将更新现有映射的值。请注意,这使用自动装箱。 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);

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

hashmap.put(key, hashmap.get(key) + 1);

put方法将替换现有键的值,如果不存在则将创建它。