java - 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);
}
解决方案
我想你想换行;
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 的有界泛型配合使用。Integer
Map.getOrDefault
get
Object
Map
char
可以自动装箱Character
就好了。只要不是,就Character
可以自动拆箱。char
null
推荐阅读
- android - Android:FCM java.io.IOException:某些设备上的 SERVICE_NOT_AVAILABLE 错误
- php - Laravel custom morph relationship
- firebase-authentication - 将 Firebase 连接到 ionic3 应用程序
- python - openpyxl 从一个工作簿复制到另一个
- android - 在 popupview 对象顶部膨胀图像
- python - 使用 tensorflow:feed_dict,ValueError: 使用序列设置数组元素
- android - Android:RecyclerView 中的处理程序和计时器无法正常工作
- android - 更改 GIT 状态文件颜色 android studio
- assembly - Microblaze,用地址值声明数据数组;
- json - 如何在由 JsonPath 标识的 JSON 字符串中找到行和列?