У меня есть таблица ha sh с методом двойного хеширования для разрешения коллизий, вот реализация Java для вставки ключа:
int h1 = hash(key);
int index = h1;
if (table[h1] != null) {
if (size == tableSize) throw new IllegalStateException("Table is full.");
int i = 1;
int h2 = hash2(key);
while (table[index = (h1 + i * h2) % tableSize] != null)
i++;
}
}
table[index] = new HashNode<>(key, value);
size++;
Но для некоторых входных данных index
может быть отрицательным после увеличения i
снова и снова, не находя подходящего места в таблице.
Так что i
становится таким большим и переполняется, тогда оператор модуля возвращает отрицательное значение. Но даже если я возьму абсолютное значение index
, на этот раз l oop будет работать вечно.
Так что же можно сделать в этой ситуации для метода двойного хеширования?