Java - 在HashMap上的containsKey()返回null - 是否检查确切的对象而不仅仅是匹配的键?

Jam*_*mes 1 java hashmap pass-by-reference pass-by-value containskey

我有一个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};

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

Era*_*ran 5

数组不工作作为重点HashMap,因为数组不会覆盖ObjecthashCodeequals方法.containsKey如果您传递的是传递给的完全相同的实例,则只会返回true put.

您可以使用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);
Run Code Online (Sandbox Code Playgroud)