java - 有人能明白为什么这里两个 "Integers"不能进行比较吗?

标签 java

public String minWindow(String S, String T) {
    if (T.length() > S.length())
        return "";
    HashMap<Character, Integer> set = new HashMap<>();
    for (int i = 0; i < T.length(); i++) {
        if (!set.containsKey(T.charAt(i))) {
            set.put(T.charAt(i), 1);
        } else {
            set.put(T.charAt(i), set.get(T.charAt(i)) + 1);
        }
    }
    int count = 0;
    int min = Integer.MAX_VALUE;
    int begin = 0;
    int end = 0;
    LinkedList<Integer> index = new LinkedList<>();
    HashMap<Character, Integer> record = new HashMap<>();
    for (int i = 0; i < S.length(); i++) {
        Character tmp = S.charAt(i);
        if (set.containsKey(tmp)) {
            index.add(i);
            if (record.containsKey(tmp)) {
                record.put(tmp, record.get(tmp) + 1);

            } else {
                record.put(tmp, 1);
            }

            int num1 = record.get(tmp);
            int num2 = set.get(tmp);
            if (num1 == num2) {
                count++;
            }
            if (count == set.size()) {
                Character head = S.charAt(index.peek());
                while (record.get(head) > set.get(head)) {
                    record.put(head, record.get(head) - 1);
                    index.remove();
                    head = S.charAt(index.peek());
                }
                if (index.getLast() - index.peek() < min) {
                    min = index.getLast() - index.peek();
                    begin = index.peek();
                    end = index.getLast();
                }
            }
        } else {
            continue;
        }
    }
    if (min == Integer.MAX_VALUE) {
        return "";
    } else {

        return S.substring(begin, end + 1);
    }
}

这是我的一个 Leetcode 问题的代码。但我认为这不涉及算法问题。所以我把它贴在这里。问题是这样的:
我用一个hashmap“记录”记录S中的重复字符,用另一个“集合”记录T中的重复字符。当重复字符数相等时,变量“count”加1;
我通过了所有测试,除了最后一个 S 是长度为 100000 的字符串,T 是长度为 10001 的字符串。
我必须使用此表格:

            int num1 = record.get(tmp);
            int num2 = set.get(tmp);
            if (num1 == num2) {
                count++;
            }

而不是:

            if(record.get(tmp)==set.get(tmp)){
                count++;
            }

只有这样才能比较两个整数,否则“计数”不会相加。为什么前 265 个测试用例可以通过,但最后一个大字符串却出现问题?预先感谢您。

最佳答案

因为您的 map 的值是整数。整数是对象,必须使用 equals 方法进行比较。

if(record.get(tmp).equals(set.get(tmp))){

关于java - 有人能明白为什么这里两个 "Integers"不能进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673894/

相关文章:

java - 尽管可变,但从技术上讲,这是否是线程安全的?

Java JCIFS如何正确地将文件从Samba复制到Windows本地?

Java 清理步骤

java - 我无法将我的用户名和密码从一个 jframe 转移到另一个 jframe

java - Spring MVC : Security configuration requireSecure() must redirect permanently 301

java - Joda LocalDate 的属性编辑器异常

java - 如何从另一个类调用对象 - 无法访问

Java Lucene 搜索 - 是否可以搜索某个范围内的数字?

java - 添加 mvc 命名空间时 Spring-MVC 不起作用

java - 空回复正文发帖放心