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 に答える