HashMap行为怪异 import java.io.*; 导入java.util.*; 类解决方案{ 公共静态void main(字符串[]args){ HashMap=newHashMap(); 长sq=16; int v=8,u=2; int ans=0; map.put(u,map.getOrDefault(u,0)+1); ans+=map.getOrDefault(sq/v,0); 系统输出打印LN(ans); } }
答案显然应该是1,但它输出0。 知道它为什么会这样吗?HashMap行为怪异 import java.io.*; 导入java.util.*; 类解决方案{ 公共静态void main(字符串[]args){ HashMap=newHashMap(); 长sq=16; int v=8,u=2; int ans=0; map.put(u,map.getOrDefault(u,0)+1); ans+=map.getOrDefault(sq/v,0); 系统输出打印LN(ans); } },java,hashmap,Java,Hashmap,答案显然应该是1,但它输出0。 知道它为什么会这样吗? 还是我遗漏了什么?sq/v将long除以int,因此结果是long,当传递到map.getOrDefault(sq/v,0)时,它被装箱到long。您的映射中没有Long键,因此它返回默认值0 如果将sq更改为int,则sq/v的结果也将是int,并且map.getOrDefault(sq/v,0)将返回1。映射需要键入java.lang.Integer作为键 更改为: import java.io.*; import java.util.
还是我遗漏了什么?
sq/v
将long
除以int
,因此结果是long
,当传递到map.getOrDefault(sq/v,0)
时,它被装箱到long
。您的映射中没有Long
键,因此它返回默认值0
如果将sq
更改为int
,则sq/v
的结果也将是int
,并且map.getOrDefault(sq/v,0)
将返回1。映射需要键入java.lang.Integer作为键
更改为:
import java.io.*;
import java.util.*;
class Solution {
public static void main (String[] args) {
HashMap<Integer, Integer> map = new HashMap<>();
long sq = 16;
int v = 8, u = 2;
int ans = 0;
map.put(u, map.getOrDefault(u, 0) + 1);
ans += map.getOrDefault(sq/v, 0);
System.out.println(ans);
}
}
注意:原始数据类型int也可以使用
这也将有助于:
ans += map.getOrDefault(Integer.valueOf((int) (sq/v)), 0);
ans += map.getOrDefault((int) (sq/v), 0);