0

我正在用 java 编写 HashMap 的实现,并且在 containsKey 方法中定位正确的存储桶时遇到了一些问题

public class MyHashMap<K, V> {

LinkedList<MyEntry>[] table;
int size;
float maxLoadFactor;

public boolean containsKey(K key) {

    if(this.isEmpty())
        return false;
    if(table[table.length % key.hashCode()].isEmpty())
        return false;
    else {
    for(int i = 0; i < table[table.length % key.hashCode()].size(); i++) { 
        if(table[table.length % key.hashCode()].get(i).key == key)
            return true;
        }
    }
    return false;
}

我遇到的问题主要是 table[table.length % key.hashCode()]。我认为这不是为哈希表找到正确存储桶的正确方法,但我不确定是什么。任何帮助表示赞赏。如果您有任何问题,请告诉我。谢谢。

4

1 回答 1

2

在您使用的每个地方table.length % key.hashCode(),它都应该是key.hashCode() % table.length。这意味着如果 hashCode 大于表的大小,它将“环绕”到开头。或者更确切地说,它计算 key.hashCode()/table.length 的剩余部分并将其放在那里。希望有帮助!

于 2012-11-20T01:49:13.927 回答