hashmap行为怪异

hmtdttj4  于 2021-07-04  发布在  Java
关注(0)|答案(2)|浏览(309)
  1. import java.io.*;
  2. import java.util.*;
  3. class Solution {
  4. public static void main (String[] args) {
  5. HashMap<Integer, Integer> map = new HashMap<>();
  6. long sq = 16;
  7. int v = 8, u = 2;
  8. int ans = 0;
  9. map.put(u, map.getOrDefault(u, 0) + 1);
  10. ans += map.getOrDefault(sq/v, 0);
  11. System.out.println(ans);
  12. }
  13. }

答案应该是1,但它输出0。你知道为什么会这样吗?还是我遗漏了什么?

2mbi3lxu

2mbi3lxu1#

Map需要类型java.lang.integer作为键
更改为:

  1. ans += map.getOrDefault(Integer.valueOf((int) (sq/v)), 0);

注意:原始数据类型int也可以工作。
这也会起作用:

  1. ans += map.getOrDefault((int) (sq/v), 0);
gpfsuwkq

gpfsuwkq2#

sq/v 分裂 longint ,因此结果是 long ,装箱至 Long 当传递给 map.getOrDefault(sq/v,0) . 你没有 Long 钥匙在你的房间里 Map ,因此返回默认值 0 .
如果你改变了 sqint ,结果 sq/v 也将是 int ,和 map.getOrDefault(sq/v,0) 将返回1。

相关问题