hashmap行为怪异

hmtdttj4  于 2021-07-04  发布在  Java
关注(0)|答案(2)|浏览(250)
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);
    }
}

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

2mbi3lxu

2mbi3lxu1#

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

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

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

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。

相关问题