Требуется реализовать HashSet с открытой адресацией, в который можно добавлять неограниченное кол-во элементов.
Язык программирования: Java.
Максимальный размер массива 2_147_483_647
Максимальное значение hashCode тоже 2_147_483_647
При кол-ве элементов много меньшем максимального размера массива я определил следующую реализацию:
Для определения размера таблицы используем статическое множество простых чисел:
- сама таблица с объектами
Node - просто обертка для T (Дженерик)
При инициализации используем tableSize[0]
Далее при добавлении элементов, определяем коэффициент заполненности,
если он больше 0.7, то увеличиваем таблицу в ~2 раза (то есть берем следующее число из tableSize)
и копируем(добавляем заново) все из старого массива.
Хэш-функция проста
Далее встают два вопроса:
Что делать, когда у двух объектов одинаковые hash
И как добиться неограниченности размера.