我正在分配作业,我必须将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){

07-26 02:03