假设我们有一个HashMap<String, Integer>Java语言。如何为找到的每个字符串更新(递增)字符串键的整数值?可以删除并重新进入该对,但是开销将是一个问题。另一种方法是只放置新的一对,而旧的将被替换。在后一种情况下,如果哈希码与我要插入的新密钥发生冲突怎么办?哈希表的正确行为是为其分配一个不同的位置,或在当前存储桶中列出该列表。
3 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
Java 8方式:
您可以使用computeIfPresentmethod并为其提供一个映射函数,该函数将被调用以基于现有值计算一个新值。
例如,
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"));
或者,您可以使用mergemethod,其中1为默认值,函数将现有值增加1:
words.merge("hello", 1, Integer::sum);
此外,有一堆其他有用的方法,例如putIfAbsent,getOrDefault,forEach等。
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
简化的Java 8方式:
map.put(key, map.getOrDefault(key, 0) + 1);
该方法使用HashMap的方法来检索键的值,但是如果无法检索该键,它将返回指定的默认值(在这种情况下为'0')。
核心Java支持此功能:HashMap <K,V> getOrDefault(Object key,V defaultValue)
添加回答
举报
0/150
提交
取消