首页 > 解决方案 > HashMap 上的 Java 8 getOrDefault 方法未按预期工作

问题描述

我无法弄清楚为什么这个 hashmap 例程没有按预期增加我的字符​​数。我怀疑这与 Character 和 char 之间的演员阵容有关,但我不确定。每个字符的计数始终为 1。

String s = "loveleetcode";

Map<Character, Integer> hm = new HashMap<Character, Integer>(); 

for (int x = 0; x < s.length(); x++) {
    hm.put(s.charAt(x), hm.getOrDefault(hm.get(s.charAt(x)), 0) +1);
}

标签: javahashmap

解决方案


我想你想换行;

hm.put(s.charAt(x), hm.getOrDefault(hm.get(s.charAt(x)), 0) +1);

hm.put(s.charAt(x), hm.getOrDefault(s.charAt(x), 0) +1);

在原始代码hm.get(s.charAt(x))中将返回null,并且该键将不存在。尽管, (或实际上)接受该参数null的类型,因为这使得接口更好地与 Java 的有界泛型配合使用。IntegerMap.getOrDefaultgetObjectMap

char可以自动装箱Character就好了。只要不是,就Character可以自动拆箱。charnull


推荐阅读