использование hashCode для возврата огромных целочисленных идентификаторов для HashMap - PullRequest
0 голосов
/ 11 февраля 2019

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

У меня есть собственный класс, у которого есть Integer идентификатор в качестве последовательного числа, я использовал этот класс как 'key' HashSet и в методе hasCode() я возвращаю идентификатор, что означает, чтобазовый массив HashSet будет искать индекс N, который я возвращаю из hasCode(), чтобы сохранить значение.

Теперь, даже если я верну Integer.MAX_VALUE - 1 из hashCode(), HashMap сможет сохранить значение на карте.Вопрос в том, используется ли Integer.MAX_VALUE -1 в качестве индекса базового массива?Если да, HashMap создает этот огромный массив при создании его экземпляра?

1 Ответ

0 голосов
/ 11 февраля 2019

Нет, это не тот случай.Hashmap изначально выделит массив из 16 элементов, а затем изменит размер в зависимости от коэффициента загрузки.Так что в случае хэш-кода, возвращающего целое число, которое не помещается в этот массив, или даже отрицательное число, существует простой механизм, который можно использовать как абсолютное значение мода.В упрощенном виде:

 int arrayIndex = abs(hashCode) % arraySize; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...