На самом деле, некоторые из современных реализаций Hashmap действительно сделаны из массивов, как вы предлагаете.Позвольте мне набросать, как это работает:
Хеш-функция Хеш-функция преобразует ваши ключи в индекс для первого массива (массив K).Для этого может использоваться хеш-функция, такая как MD5 или более простая, обычно включающая оператор по модулю.
Buckets Простая реализация Hashmap, основанная на массивах, может использовать сегменты, чтобы справляться с коллизиями.Каждый элемент ('bucket') в массиве K содержит сам массив (массив P) пар.При добавлении или запросе элемента, хеш-функция указывает на правильный сегмент в K, который содержит желаемый массив P. Затем вы перебираете элементы в P, пока не найдете соответствующий ключ, или не назначите новый элемент вконец P.
Отображение ключей в сегменты с использованием хэша Вы должны убедиться, что количество сегментов (т.е. размер K) равно степени 2, скажем, 2 ^ b,Чтобы найти правильный индекс сегмента для некоторого ключа, вычислите Hash (ключ), но оставьте только первые b бит.Это ваш индекс при приведении к целому числу.
Изменение масштаба Вычисление хеша ключа и поиск правильного сегмента очень быстро.Но как только корзина наполнится, вам придется перебирать все больше и больше элементов, прежде чем вы доберетесь до нужного.Поэтому важно иметь достаточно блоков для правильного распределения объектов, иначе ваш Hashmap станет медленным.
Поскольку вы обычно не знаете, сколько объектов вы хотите сохранить в Hashmap заранее, этожелательно динамически увеличивать или уменьшать карту.Вы можете вести подсчет количества сохраненных объектов, и как только он превысит определенный порог, вы воссоздаете всю структуру, но на этот раз с большим или меньшим размером для массива K. Таким образом, некоторые из сегментов в K, которые былиу очень заполненных элементов теперь есть элементы, разделенные между несколькими сегментами, так что производительность будет лучше.
Альтернативы Вы также можете использовать двумерный массив вместо массива массивов,или вы можете обменять массив P на связанный список.Кроме того, вместо того, чтобы хранить общее количество хранимых объектов, вы можете просто выбрать воссоздание (то есть изменение масштаба) хеш-карты, если одно из сегментов содержит больше, чем настроенное количество элементов.
Вариант того, кем вы являетесьзапрос описывается как 'таблица хеш-функции массива' в записи .
Code в хэш-таблице для хеш-кодов. Взгляните здесь
Надеюсь, это поможет.