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