Влияет ли коллизия HashMap на изменение размера? - PullRequest
3 голосов
/ 10 февраля 2010

Когда в ходе размещения в HashMap происходит столкновение, изменяется ли размер карты или добавляется ли запись в список в этом конкретном сегменте?

Ответы [ 4 ]

13 голосов
/ 10 февраля 2010

Когда вы говорите «столкновение», вы имеете в виду тот же хэш-код? Хэш-код используется для определения того, какой сегмент в HashMap должен использоваться, и этот сегмент состоит из связанного списка всех записей с одинаковым хэш-кодом. Затем записи сравниваются на равенство (с помощью .equals ()) перед тем, как их вернуть или загрузить (получить / поставить).

Обратите внимание, что это конкретно HashMap (поскольку именно об этом вы спрашивали), а также с другими реализациями, YMMV.

2 голосов
/ 10 февраля 2010

Может произойти что угодно - это зависит от коэффициента заполнения HashMap.

Однако обычно он добавляется в список для этого сегмента - класс HashMap спроектирован таким образом, что его размеры сравнительно редки (потому что они дороже).

1 голос
/ 11 февраля 2010

Документация java.util.HashMap объясняет точно, когда размер карты изменяется:

Экземпляр HashMap имеет два параметра, которые влияют на его производительность: начальная емкость и коэффициент загрузки .

Емкость - это количество сегментов в хэш-таблице, а начальная емкость - это просто емкость на момент создания хэш-таблицы.

Коэффициент загрузки представляет собой меру того, насколько полной может быть заполнена хеш-таблица, прежде чем ее емкость будет автоматически увеличена.

Когда число записей в хеш-таблице превышает произведение коэффициента загрузки и текущей емкости, хеш-таблица перефразируется (то есть внутренние структуры данных перестраиваются), так что в хеш-таблице примерно вдвое больше сегментов.

Начальная емкость по умолчанию - 16, коэффициент загрузки по умолчанию - 0,75. Вы можете указать другие значения в конструкторе карты.

0 голосов
/ 10 февраля 2010

Изменение размера выполняется при достижении коэффициента нагрузки.

Когда во время вставки в HashMap происходит столкновение, запись добавляется в список в этом конкретном «ведре». Если коэффициент загрузки достигнут, Hashmap изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...