Hashmap с отдельной цепочкой - PullRequest
1 голос
/ 23 ноября 2011

Есть ли реализация интерфейса Java-карты, которая использует раздельное связывание в качестве разрешения коллизий. Прочитав javadocs для HashMap и HashTable, я пришел к выводу, что реализация в основном заменяет значение и практически не использует разрешение конфликтов?

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

Вы ошиблись: он использует связанный список записей для каждого сегмента.

При помещении значения в карту карта начинается с вызова hashCode для ключа, а затем преобразует этот хэш-кодтак что это между 0 и количеством ведер.Если корзина пуста, ключ хранится в этой корзине.Если это не так, то каждый ключ в этом сегменте сравнивается с новым ключом с equals.Если один равен, то его значение заменяется новым значением.Иначе, новая запись с новым ключом добавляется в список записей корзины.

Если вы хотите сохранить несколько значений для данного ключа, тогда используйте Map<Key, List<Value>> или MultiMap от Guava..

3 голосов
/ 23 ноября 2011

У него есть разрешение коллизий, но это потому, что два разных ключа могут оказаться в одном сегменте после хеширования.

Если вы хотите сохранить более одного значения для одного ключа, вы всегда можете использовать HashMap<KeyType, ArrayList<ValueType>> и выполнить некоторую домашнюю работу для инициализации массива при необходимости.

...