Я пытаюсь сделать метод, который автоматически создает новый hashTable с 1,25 больше емкости, но у меня ошибка переполнения. Код:Rehashing method throws NullPointerException
public void reHash(){
Config.MAX_ESTACIONS = (int) (Config.MAX_ESTACIONS * 1.25);
Vector<EstacioHash>[] newHashTable = new Vector[Config.MAX_ESTACIONS];
EstacioHash nouElement = new EstacioHash();
for (int i=0; i<hashTable.length;i++){
for (int k=0; k<hashTable[i].size();k++){
nouElement.key = hashTable[i].get(k).key;
nouElement.value = hashTable[i].get(k).value;
int position = hashFunction(nouElement.key);
newHashTable[position].add(nouElement); <---- OverFlow here
}
}
hashTable = newHashTable;
}
Почему у меня есть overFlow? Программы работают корректно без функции rehash. Хэш-функция:
public int hashFunction (Object clau){
String clauMinuscules = ((String) clau).toLowerCase();
char[] key = clauMinuscules.toCharArray();
int result=0;
for (int i=0;i<key.length;i++){
result = (result + key[i]^i)%Config.MAX_ESTACIONS;
}
return result;
}
Проблема, с которой я столкнулся сейчас, это первый раз, когда я использую метод reHash, если работает отлично. Второй и третий раз это не работает. Все значения переходят в одно и то же положение хеш-таблицы. Почему это происходит? – user2911701
@ user2911701 Вы говорите, что все элементы добавляются к одному и тому же вектору? Возможно, ваш хешфункция работает не так, как ожидалось. Также обратите внимание, что вы всегда добавляете одну и ту же ссылку в свою таблицу. Вы должны поместить 'EstacioHash nouElement = new EstacioHash();' внутри вложенного цикла. –
Спасибо, все проблемы решены. – user2911701