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 中的键,因为数组不会覆盖 ObjecthashCodeequals 方法。如果您传递与传递给 put.

完全相同的实例,containsKey 只会 return 为真

您可以使用 ListSet 作为键而不是数组。

例如:

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);