@silentproger
учу джаву

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

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

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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
28 апр. 2024, в 20:14
700 руб./за проект
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект