Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Устройство HashMap в языке Java?

Максим Рыбалкин Профи (680), закрыт 4 года назад
Нашел информацию, что в HashMap'e поиск какого-либо значения по ключу занимает O(1) времени; в отличии от бинарного поиска или полного перебора коллекции. Поясните, пожалуйста, как же именно значение сразу находится по ключу? Ведь для поиска конкретной пары ключ-значение тоже нужен какой-то перебор всех ключей коллекции, что подразумевает работу за время O(n)
Лучший ответ
Крутой Хацкер Профи (782) 4 года назад
Ну смари. Берем какую-нибудь, допустим, какую-нибудь строку-ключ. Скажем, "Vova".
Хешируем её. Получается, допустим, хеш = 14789.
Находим остаток от деления хеша на длину массива (допустим стандартная длина = 100): 14789 mod 100 = 89.
По 89 индексу записываем значение, соответствующее ключу "Vova". Профит.

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

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

Если заполнил больше, скажем, 40% массива - расширь его раза в два, пересчитав заново все индексы.

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

Такие дела.
Максим РыбалкинПрофи (680) 4 года назад
ну это таблица с автоматическим хэшированием; а тут речь о HashMap, в которую ключ задается самостоятельно. я знаю, что она сортирует объекты по хэшкодам; но она от обычной таблицы всё-же отличается
Крутой Хацкер Профи (782) >> а тут речь о HashMap, в которую ключ задается самостоятельно. У меня ключ тоже задается самостоятельно... Не понял отличия.
Остальные ответы
Железный Канцлер Мудрец (10904) 4 года назад
Полный перебор не нужен, там упорядоченное дерево внутри. Скорее O(ln(n))
Максим РыбалкинПрофи (680) 4 года назад
упорядоченное дерево разве не в TreeMap?
Железный Канцлер Мудрец (10904) Если хешей много, их пакуют в дерево.
Mukhtar Ll Профи (780) 4 года назад
Дело в том, что HashMap не перебирает ключей. Прочитайте вот это. https://ruhighload.com/Что+такое+хеш-таблицы+и+как+они+работают
Похожие вопросы