2016-03-02 8 views
1

У меня есть HashMap Integer [], Integer []. Одна из записей:Java - containsKey() на HashMap, возвращающем нуль - проверяет ли он точный объект, а не только соответствующий ключ?

WEIGHTS.put (новое целое [] {0,0,0,0,0}, новое целое [] {20,20,15,15,10,10,5 , 5});

Я тогда звоните:

вероятности = WEIGHTS.get (sheriffAndBanditPositions);

, где находится sheriffAndBanditPositions:

Целое [] sheriffAndBanditPositions = новый Integer [] {0,0,0,0,0};

Это приводит к тому, что вероятности равны нулю. Почему это? Как проверить, соответствует ли соответствующая Integer [] клавиша HashMap, если вышеуказанное невозможно? Спасибо!

ответ

5

Массив не работает как ключ в HashMap, поскольку массивы не отменяют Object «s hashCode и equals методы. containsKey вернет true, если вы передадите тот же экземпляр, который вы передали, put.

В качестве ключа вместо массива можно использовать List или Set.

Например:

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

@James Я добавил небольшое обходное решение [здесь] (http://stackoverflow.com/questions/31938180/hashmap-with-byte-array-key-and-string-value-containskey-function-doesnt-wo). Может представлять интерес для вас. –

 Смежные вопросы

  • Нет связанных вопросов^_^