从 Java HashMap 获取 Integer 值时是否需要调用 intValue() 方法?

Pan*_*kaj 2 java autoboxing integer hashmap

我有一个 HashMap 声明为: Map<Character, Integer> dict = new HashMap<Character, Integer>(); 在代码中的某处,我从上面的映射中获取字符的整数值。我观察到,如果在获取整数值时不添加该.intValue()方法,代码将终止,没有任何错误,如果我将其放在intValue()** 标记的区域中,它可以正常工作。

下面是完整的代码:

class Solution {
    public String minWindow(String s, String t) {
        int l =0, r = 0;
        Map<Character, Integer> dict = new HashMap<Character, Integer>();

        for(int i = 0; i < t.length(); i++){
            int count = dict.getOrDefault(t.charAt(i), 0);
            dict.put(t.charAt(i), count + 1);
        }

        int formed = 0;
        int required = dict.size();
        Map<Character, Integer> window = new HashMap<Character, Integer>();

        int[] ans = {-1, 0, 0};

        while(r < s.length()){
            char c = s.charAt(r);
            int count = window.getOrDefault(c, 0);
            window.put(c, count + 1);
            **if(dict.containsKey(c) && dict.get(c) == window.get(c)){
                formed++;
            }**
            while(l <= r && formed == required){
                if(ans[0] == -1 || r - l + 1 < ans[0]){
                    ans[0] = r - l + 1;
                    ans[1] = l;
                    ans[2] = r;
                }
                window.put(s.charAt(l), window.get(s.charAt(l)) - 1);
                if(dict.containsKey(s.charAt(l)) && window.get(s.charAt(l)) < dict.get(s.charAt(l))){
                    formed--;
                }
                l++;
            }
            r++;
        }
        return ans[0] != -1 ? s.substring(ans[1], ans[2] + 1) : "";

    }
    public static void main(String[] args){
        Solution s = new Soultion();
        String ret = s.minwindow("ABCDEF", "BCD");
        System.out.print(ret);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ell*_*sch 6

dict.get(c) == window.get(c)是你如何比较int;不幸的是你正在比较Integer。调用intValue强制进行原始相等比较是一种选择。另一个是dict.get(c).equals(window.get(c))

  • @Pankaj,它仍然不是那么简单的`Integer a = 1000; 整数 b = 1000;System.out.print(a == b);` 也会输出 `false` (通常只缓存 256 个整数(-128 到 127 左右);对于其他整数,必须创建一个新实例) (2认同)