gpt4 book ai didi

java - 重新哈希方法抛出 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:05:56 24 4
gpt4 key购买 nike

我正在尝试一种自动创建容量增加 1.25 倍的新哈希表的方法,但出现溢出错误。代码是:

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;
}

最佳答案

我认为您没有溢出,但更多的是NullPointerException

对象的默认值为null。创建新表时,您有一个充满 null 值的数组。

在尝试获取某个位置的 Vector 并向其中添加一些内容之前,您需要初始化 newHashTable 的每个条目。

Vector<EstacioHash>[] newHashTable = new Vector[Config.MAX_ESTACIONS];
for (int i=0; i<newHashTable.length;i++){
newHashTable[i] = new Vector<EstacioHash>();
}

关于java - 重新哈希方法抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com