Ваш метод удаления неправильный.
Следующий фрагмент кода показывает проблему:
SymbolTable st = new SymbolTable(733);
st.put("12", 'A');
st.put("21", 'B');
st.put("13", 'C');
st.remove("13");
После запуска этого кода st
будет содержать две клавиши «12» и «13» вместо «12» и «21».
Одной из проблем является метод put
: если ваш ключ уже находится в хеш-таблице, но не в месте, указанном хеш-кодом ключей, вы выполняете (около строки 27 в методе put)
if(key.equals(keys[i])){
vals[i]= val;
break;
}
с последующим (в конце метода put)
keys[z]=key;
vals[z]=val;
, который перезаписывает какой-то другой случайный ключ.
Вторая проблема заключается в методе delete
. Вы пытаетесь удалить и заново вставить все элементы.
Тем не менее,
put(keys[i], vals[i]);
keys[i] = null;
vals[i] = null;
удалит элемент, если он будет вставлен в то же место. Это может легко произойти, если два элемента имеют одинаковый хэш-код.