Справочная информация. Словарь использует функцию хеширования для генерации индекса для каждого введенного вами значения.
PS: У меня есть теоретические знания о том, что такое функция Хэша и что она делает, но я не видел ее фактической реализации. Кроме того, так как многие языки имеют встроенные структуры данных для этой цели, это сделало меня любопытством :)
Вы ошибаетесь в предположении об уникальности хэш-функции.
Если взять, например, HashMap
Java, он использует hashCode()
ключа и применяет к нему дополнительную хэш-функцию (для защиты от хэш-функций низкого качества). Затем берется вычисляемое значение хеша и сопоставляет его с индексом в хранилище карты, который обычно намного меньше хэш-значения.
Поэтому, даже если хеш-функция вернет уникальное значение для каждого ключа (чего ему не требуется), HashMap
все равно нормализует это значение до гораздо меньшего индекса хранилища HashMap
. Поэтому нет переполнения (если вы не вставляете слишком много элементов в Map
).