@silentproger
учу джаву

Почему в HashMap используется хэшкод, а не просто ссылки?

Собственно интересует вопрос, для чего вообще придуман этот механизм с хэшкодами, корзинами, в которых лежат списки объектов с одинаковыми хэшкодами? Почему нет простой карты ссылка->ссылка?
  • Вопрос задан
  • 399 просмотров
Решения вопроса 2
axifive
@axifive
Software Engineer
Хэшкод используется для проверки уникальности сохраняемых объектов ключей. Но так как уникальность хэша ограничена длиной типа int, то может возникать коллизия для этого и используются связные списки объектов с одинаковыми хэшкодами.

Почему же не просто ссылки? Представьте, что мы последовательно добавляем в Map два эквивалентных объекта-ключа, ссылки у них разные. Получается в Map будет два объекта, они имеют одинаковые хэши, но разные ссылки. А, по определению, в Map все ключи должны быть уникальны.
Ответ написан
@krog
Developer
При хорошей хэш-функции получаем временную сложность поиска - O(1). Без хэшкода сложность поиска будет O(n) (при плохой хэш-функции тоже). Корзины нужны для разрешения конфликтов методом цепочек.
Если вы имеете ввиду, что можно использовать адрес объекта вместо хэш-кода, то нельзя из-за того, что GC меняет адреса (операция mark-sweep-compact) или, например, логически эквивалентные объекты могут иметь разные адреса.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Эквивалентные объекты должны иметь эквивалентные идентификаторы.
Ссылки этого не могут обеспечить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы