我正在分配作业,我必须将10,000个数字散列到负载大小为.1,.2 .3 ....至.9的哈希表中。我的问题是我的哈希函数给了我一些溢出或类似的东西。如果要对负载因子为0.5的表进行哈希处理(例如36077(mod)20,000),则将16070作为密钥。这仅在高于负载系数的数字上发生。这是我的哈希函数的代码。
public int linearHash(int in){
int hashKey = in%hashTableArray.length;
while(this.hashTableArray[hashKey] != 0){
hashKey += 1;
}
return hashKey;
}
谢谢。
最佳答案
您没有在检查是否超出了hashTableArray
循环中while
的索引范围。您可以这样做:
while (hashKey < hashTableArray.length && this.hashTableArray[hashKey] != 0){