【发布时间】:2020-01-19 17:53:57
【问题描述】:
在hackerrank上解决问题时,我发现由于逻辑错误,我的输出与正确答案不同。我重新创建了逻辑错误以更好地解释这种情况。
HashMap<Integer[] , Integer> hm = new HashMap<>();
//both a and b have different hashcode
Integer[] a = {1, 1, 0, 0};
Integer[] b = {1, 1, 0, 0};
hm.put(a,1);
if (!hm.containsKey(b)) {
//key does not exists so, create new one
hm.put(b, 1);
}
else {
//key does exists so, put its value = value + 1
hm.put(b, hm.get(b)+1);
}
这里 hm.containsKey(b) 返回 false,但如果返回 true,我的输出将匹配正确的输出。由于 a 和 b 的内容相等,如何使 containsKey(b) 返回 true?
【问题讨论】:
-
HashMap
hm = new HashMap();到 HashMap , Integer> hm = new HashMap(); -
它使用等于。但是 equals 对数组没用。
-
containsKey(key)的文档:当且仅当此映射包含键 k 的映射使得 Objects.equals(key, k) 时才返回 true