Java - HashMap 上的 containsKey() 返回 null - 它是否检查确切的对象而不仅仅是匹配的键?
Java - containsKey() on HashMap returning null - is it checking for the exact object rather than just a matching key?
我有一个 Integer[], Integer[] 的 HashMap。其中一项是:
WEIGHTS.put(new Integer[]{0,0,0,0,0}, new Integer[]{20,20,15,15,10,10,5,5});
然后我打电话给:
probabilities = WEIGHTS.get(sheriffAndBanditPositions);
其中 sheriffAndBanditPositions 是:
Integer[] sheriffAndBanditPositions = new Integer[]{0,0,0,0,0};
这导致概率为空。为什么是这样?如果以上不可能,我如何检查匹配的 Integer[] 键是否在 HashMap 中?
谢谢!
数组不能用作 HashMap
中的键,因为数组不会覆盖 Object
的 hashCode
和 equals
方法。如果您传递与传递给 put
.
完全相同的实例,containsKey
只会 return 为真
您可以使用 List
或 Set
作为键而不是数组。
例如:
Map<List<Integer>,Integer[]> WEIGHTS = ...
WEIGHTS.put(Arrays.asList(new Integer[]{0,0,0,0,0}), new Integer[]{20,20,15,15,10,10,5,5});
List<Integer> sheriffAndBanditPositions = Arrays.asList(new Integer[]{0,0,0,0,0});
probabilities = WEIGHTS.get(sheriffAndBanditPositions);
我有一个 Integer[], Integer[] 的 HashMap。其中一项是:
WEIGHTS.put(new Integer[]{0,0,0,0,0}, new Integer[]{20,20,15,15,10,10,5,5});
然后我打电话给:
probabilities = WEIGHTS.get(sheriffAndBanditPositions);
其中 sheriffAndBanditPositions 是:
Integer[] sheriffAndBanditPositions = new Integer[]{0,0,0,0,0};
这导致概率为空。为什么是这样?如果以上不可能,我如何检查匹配的 Integer[] 键是否在 HashMap 中? 谢谢!
数组不能用作 HashMap
中的键,因为数组不会覆盖 Object
的 hashCode
和 equals
方法。如果您传递与传递给 put
.
containsKey
只会 return 为真
您可以使用 List
或 Set
作为键而不是数组。
例如:
Map<List<Integer>,Integer[]> WEIGHTS = ...
WEIGHTS.put(Arrays.asList(new Integer[]{0,0,0,0,0}), new Integer[]{20,20,15,15,10,10,5,5});
List<Integer> sheriffAndBanditPositions = Arrays.asList(new Integer[]{0,0,0,0,0});
probabilities = WEIGHTS.get(sheriffAndBanditPositions);