我正在尝试自动创建一个容量增加1.25的新hashTable的方法,但是我有一个溢出错误。代码是:
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;
}
为什么我有一个过流?程序在没有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;
}
答案 0 :(得分:1)
我认为你没有溢出,但更多的是NullPointerException
。
Object
的默认值为null
。创建新表时,您的数组中包含null
个值。
您需要初始化newHashTable
的每个条目,然后尝试在某个位置获取Vector
并在其中添加内容。
Vector<EstacioHash>[] newHashTable = new Vector[Config.MAX_ESTACIONS];
for (int i=0; i<newHashTable.length;i++){
newHashTable[i] = new Vector<EstacioHash>();
}