Моя текущая реализация Quadratic Probing заменяет элемент, сохраняемый в текущем индексе, новым элементом при столкновении.Я вставляю три объекта Person, которые хранятся с использованием их фамилии в качестве ключа.Чтобы проверить разрешение столкновения реализации, у них всех есть та же самая фамилия, которая является "Ветряной мельницей".
Мне нужна реализация, чтобы сохранить все объекты-люди, но просто переместить их в другой индекс вместо того, чтобы переопределять их.
Размер списка был установлен как 7, хранится в используемой переменной "M"по модулю в функции вставки.
Функция вставки
@Override
public void put(String key, Person value) {
int tmp = hash(key);
int i, h = 0;
for (i = tmp; keys[i] != null; i = (i + h * h++) % M) {
collisionCount++;
if (keys[i].equals(key)) {
values[i] = value;
return;
}
}
keys[i] = key;
values[i] = value;
N++;
}
Функция хеширования
private int hash(String key) {
return (key.hashCode() & 0x7fffffff) % M;
}
Функция получения
@Override
public List<Person> get(String key) {
List<Person> results = new ArrayList<>();
int tmp = hash(key);
int i = hash(key), h = 0;
while (keys[i] != null)
{
if (keys[i].equals(key))
results.add(values[i]);
i = (i + h * h++) % M;
}
return results;
}
Когда я удаляюЧасть кода, которая переопределяет предыдущие значения, индекс int переполняется и превращается в отрицательное число, вызывая сбой программы.