为了账号安全,请及时绑定邮箱和手机立即绑定

HashMap 的 containsKey 方法返回 false,但它的键是 integer[]

HashMap 的 containsKey 方法返回 false,但它的键是 integer[]

守候你守候我 2023-08-04 19:20:09
在解决 hackerrank 上的问题时,我发现由于逻辑错误,我的输出与正确答案不同。我重现了逻辑错误,以便以更好的方式解释情况。HashMap<Integer[] , Integer> hm = new HashMap<>();//both a and b have different hashcodeInteger[] 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 ?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您不应该使用数组作为 a 的键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); 

}


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信