Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java HashMap获取整数值时是否需要调用intValue()方法?_Java_Hashmap_Integer_Autoboxing - Fatal编程技术网

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

从Java HashMap获取整数值时是否需要调用intValue()方法?,java,hashmap,integer,autoboxing,Java,Hashmap,Integer,Autoboxing,我将HashMap声明为: Map dict=新的HashMap; 在代码的某个地方,我从上面的映射中获取一个字符的整数值。我观察到,如果在获取整数值时不添加.intValue方法,代码将终止,不会出现任何错误,如果我将intValue放在**标记的区域中,则工作正常 以下是完整的代码: class Solution { public String minWindow(String s, String t) { int l =0, r = 0; Map&l

我将HashMap声明为: Map dict=新的HashMap; 在代码的某个地方,我从上面的映射中获取一个字符的整数值。我观察到,如果在获取整数值时不添加.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);
    }
}

dict.getc==window.getc是比较int的方式;不幸的是,您正在比较整数。调用intValue强制进行基本相等比较是一种选择。另一个是dict.getc.equalswindow.getc

会做类似dict.getc-window.getc==0的事情来解装箱吗?@MihirKekkar:会的。但是为什么要用性能不佳的解装箱来处理performant equals呢?@ChristianH.Kuhn有趣的是,我不知道解装箱的性能时间很差。但是即使我比较整数,也会自动在解装箱整数之间进行比较,对吗?为什么代码会终止?为什么像下面这样的代码可以工作而不是上面的代码:整数a=5;整数b=6;ifa==b{System.out.printlnYes;}else{System.out.printlnNo;}我想这两个条件是相同的。如果我遗漏了什么,请告诉我。@Pankaj,这不是一个微不足道的整数a=1000;整数b=1000;System.out.printa==b;也会输出false,通常只缓存256个整数-128到127个左右;对于其他实例,必须创建一个新实例