2016-03-02 60 views
1

我有一个Integer [],Integer []的HashMap。其中一个条目是:Java - containsKey()在HashMap返回null - 它检查确切的对象,而不是一个匹配的键?

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

我然后调用:

概率= WEIGHTS.get(sheriffAndBanditPositions);

其中sheriffAndBanditPositions是:

整数[] sheriffAndBanditPositions =新的整数[] {0,0,0,0,0};

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

回答

5

由于阵列不会覆盖ObjecthashCodeequals方法,因此阵列不能用作HashMap中的键。 containsKey只会在您传递给put的同一个实例时才会返回true。您可以使用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); 
+0

番石榴具有用于此些应用程序,还有。 – bmargulies

+0

啊该死的,谢谢你的信息! – James

+0

@詹姆斯我添加了一个轻微的解决方法[这里](http://stackoverflow.com/questions/31938180/hashmap-with-byte-array-key-and-string-value-containskey-function-doesnt-wo)。可能会对你感兴趣。 –

相关问题