1

我有一个 Integer[]、Integer[] 的 HashMap。其中一项是:

WEIGHTS.put(new Integer[]{0,0,0,0,0}, new Integer[]{20,20,15,15,10,10,5,5});

然后我打电话给:

概率 = WEIGHTS.get(sheriffAndBanditPositions);

sheriffAndBanditPositions 是:

Integer[] sheriffAndBanditPositions = new Integer[]{0,0,0,0,0};

这导致概率为空。为什么是这样?如果以上不可能,我如何检查匹配的 Integer[] 键是否在 HashMap 中?谢谢!

4

1 回答 1

5

数组不能作为 key in 工作HashMap,因为数组不会覆盖Object'shashCodeequals方法。containsKey仅当您传递与传递给的完全相同的实例时才会返回 true put

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

例如 :

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);
于 2016-03-02T12:08:04.633 回答