2016-03-02 55 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)。可能會對你感興趣。 –

相關問題