Хеш-код - это индекс, а хеш-таблица на самом низком уровне - это массив. Но для данного значения ключа мы по-разному определяем индекс в хеш-таблице, чтобы сделать поиск данных намного быстрее.
Пример: у вас есть 1000 слов и их определения. Вы хотите сохранить их так, чтобы вы могли получить определение слова очень, очень быстро - быстрее, чем бинарный поиск, что вы должны сделать с массивом.
Итак, вы создаете хеш-таблицу. Вы начинаете с массива, существенно превышающего 1000 записей, скажем, 5000 (чем больше, тем эффективнее время).
То, как вы будете использовать свою таблицу, заключается в том, что вы берете слово для поиска и конвертируете его в число от 0 до 4999. Вы выбираете алгоритм для этого; это алгоритм хеширования. Но вы, несомненно, могли бы написать что-нибудь очень быстрое.
Затем вы используете преобразованное число в качестве индекса в массиве из 5000 элементов и вставляете / находите свое определение по этому индексу. Поиска вообще нет: вы создали индекс непосредственно из поискового слова.
Все операции, которые я описал, имеют постоянное время; Ни один из них не занимает больше времени, когда мы увеличиваем количество записей. Нам просто нужно убедиться, что в хэше достаточно места, чтобы минимизировать вероятность «коллизий», то есть вероятность того, что два разных слова будут преобразованы в один и тот же целочисленный индекс. Поскольку это может произойти с любым алгоритмом хеширования, нам нужно добавить проверки, чтобы увидеть, есть ли столкновение, и сделать что-то особенное (если «hello» и «world» и hash to 1,234, и «hello» уже есть в таблице, что будем ли мы делать с «миром»? Простейшим является поместить его в 1235 и настроить нашу логику поиска, чтобы учесть эту возможность.)
Редактировать: после перечитывания вашего поста: алгоритм хеширования определенно не случайный, он должен быть детерминированным. Индекс, сгенерированный для "hello" в моем примере, должен быть 1234 каждый раз; только так может работать поиск.