gpt4 book ai didi

java - HashMap 的 containsKey 方法返回 false,但它的键是 integer[] 类型?

转载 作者:行者123 更新时间:2023-12-01 17:43:38 26 4
gpt4 key购买 nike

在解决 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 的键,因为数组不会覆盖 equalshashCode ,因此包含完全相同元素的不同数组实例不会被 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);
}

关于java - HashMap 的 containsKey 方法返回 false,但它的键是 integer[] 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com