HashMap 的 key 是 integer[] 类型,虽然它的 containsKey 方法 returns false?
HashMap have the key of integer[] type though its containsKey method returns false?
在 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) return 为假,但如果 return 为真,我的输出将与正确的匹配。由于 a 和 b 的内容相等,如何使 containsKey(b) return 为真?
您不应该使用数组作为 HashMap
的键,因为数组不会覆盖 equals
和 hashCode
,所以包含完全相同的不同数组实例HashMap
.
认为元素不相同
改用 List<Integer>
键。
Map<List<Integer>, Integer> hm = new HashMap<>();
List<Integer> a = List.of(1, 1, 0, 0);
List<Integer> b = List.of(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);
}
在 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) return 为假,但如果 return 为真,我的输出将与正确的匹配。由于 a 和 b 的内容相等,如何使 containsKey(b) return 为真?
您不应该使用数组作为 HashMap
的键,因为数组不会覆盖 equals
和 hashCode
,所以包含完全相同的不同数组实例HashMap
.
改用 List<Integer>
键。
Map<List<Integer>, Integer> hm = new HashMap<>();
List<Integer> a = List.of(1, 1, 0, 0);
List<Integer> b = List.of(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);
}