|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 86
|
|||||||||||
Хеш, хеш-функция, хеширование и HashMap15.01.2020, 19:54. Показов 6682. Ответов 8
Метки нет (Все метки)
Снова приветствую, я начал свое знакомство с классом HashMap в Java и ввиду расхождений в разных источниках, которые запутали меня, возник вопрос насчет хеширования и поиска нужного индекса в хеш-таблице. Я читал статью на хабре, но она применима только к Java 7, а с тех пор класс очень сильно изменился.
Хеш-функция и хеш-код это вроде бы разные понятия, но почему-то в некоторых статьях я не раз видел, что их смешивают и приравнивают, что вводит меня в дополнительную путаницу. Да и большинство статей с подробным разбором довольно старые. Например, в Java 7 индекс нужной ячейки вычислялся в методе indexFor, сейчас же его нет (использую JDK 12). Прошу помощи, чтобы я смог разобраться и не плутал вокруг этого уже третий день. Я попробовал посмотреть в документации и попробовал что-то найти. Внутри массива в ячейках лежат узлы класса Node. В этом классе есть поле hash - это и есть тот самый хеш-код, полученный в результате хеширования? Также там есть метод hashCode(), который вычисляется так:
Но дальше по классу я нахожу следующий метод: static final int hash(Object key), который уже вычисляется как:
При добавлении объекта в HashMap, вычисляется хеш (хеш-код) ключа, который мы получаем в результате работы метода hashCode(), а далее хеш-функция, используя этот хеш-код в результате своей работы "получает" индексы нужных ячеек массива для вставки? Я конкретно запутался и не могу двинуться дальше.
0
|
|||||||||||
| 15.01.2020, 19:54 | |
|
Ответы с готовыми решениями:
8
HashMap не так задается хеш-код Хеш-функция, двойное хеширование Хеш-функция и хеш-таблица |
|
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
|
|
| 15.01.2020, 20:25 | |
|
hsad, https://www.youtube.com/user/K... /playlists - очень доступно объясняет, как в детсаду))
0
|
|
|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 86
|
|
| 15.01.2020, 21:23 [ТС] | |
|
Aviz__ , это конечно хорошо, но если давать ссылку, то на конкретный материал на канале, а не сам канал, на котором 500+ видео. Нашел видео про Collections (причем судя по дате Java 8 там не пахнет, а реализацию в 7 я уже видел и знаю), а он два часа рассказывает про большое O и сортировку слиянием и быструю сортировку - как раз то, что нужно (нет).
Если вы знаете ответы на мои вопросы, я был бы благодарен услышать на них ответы. Я всего лишь хочу понимать эти вещи, не более того, так как код класса ввел меня в ступор. Да и после его прочтения уже начал путать, что такое хеш, что такое хеш-функция и что они делают.
0
|
|
|
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
|
|
| 15.01.2020, 21:31 | |
|
Тогда вот так
https://habr.com/ru/post/128017/
0
|
|
|
Фрилансер
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
| 15.01.2020, 22:09 | |
|
Вы сами себя запутываете, неизвестно зачем..
Хэш-функция - это любая функция, вычисляющая хэш, то есть некоторое значение заданной разрядности, однозначно вычисляемое по содержимому объекта. hashCode() - это метод объекта Java, реализующий некоторую конкретную хэш-функцию, выбранную разработчиком класса для правильной идентификации объектов класса. Как именно по hashCode() вычисляются индексы - зачем Вам это нужно на данном этапе? Главное, что нужно знать - что объекты с разным hashCode() будут храниться более эффективно
0
|
|
|
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 86
|
|
| 15.01.2020, 23:39 [ТС] | |
|
vcrop , там Java 7, а в Java 8 HashMap сильно поменялась.
Black Fregat снова вернусь к Java 7, и там был отдельный метод для вычисления нужного индекса - indexFor, который принимал хеш-код и длину внутреннего массива в качестве параметров и далее по формуле определял. А вот в Java 8 и выше его нет, поэтому я задался вопросом, как определяется этот индекс в Java 8+? Неужели прямо в этой хеш-функции? Зачем мне нужно знать? Потому что я таким же образом разобрал ArrayList и LinkedList и перешел к мапе, но тут сложнее. Максимализм это, наверное.
0
|
|
|
Фрилансер
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||
| 16.01.2020, 16:23 | ||
|
Может, попробуете не ходить "под капот"? Для работы обычно вполне достаточно внешних спецификаций
0
|
||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 16.01.2020, 16:30 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 15.10.2019
Сообщений: 13
|
||
| 17.01.2020, 13:04 | ||
Так вычисляется индекс нужной ячейки(бакета): i = (n - 1) & hash.
0
|
||
| 17.01.2020, 13:04 | |
|
Помогаю со студенческими работами здесь
9
Для формирования хеш-адреса использовать хеш-функцию универсального хеширования
Хеш функция на си хеш функция Хеш функция Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|