0
 public void put(int key, int value) {
        int hash = (key % TABLE_SIZE);
        if (table[hash] == null)
            table[hash] = new LinkedHashEntry(key, value);
        else {
            LinkedHashEntry entry = table[hash];
            while (entry.getNext() != null && entry.getKey() != key)
                entry = entry.getNext();
            if (entry.getKey() == key)
                entry.setValue(value);
            else
                entry.setNext(new LinkedHashEntry(key, value));
        }
    }

ハッシュ テーブル チェーンの概念を学んでいるところで、新しい項目を追加するかどうか考えました。アイテムのキーが存在するかどうかを確認します。存在する場合は、それを同じキーを持つ同じノードにリンクするだけです。しかし、ハッシュ テーブル チェーン タイトルの下でこのコードをオンラインで見つけましたが、私が想定していたことを実行しません。それは私が間違っているか、このコードのどちらかです.この部分は私を最も混乱させます:

if (entry.getKey() == key)
                entry.setValue(value);

これは、オープン アドレス ハッシュと同じように行われます。古いノードを新しいノードに置き換えるだけです。ハッシュ テーブルとハッシュ テーブル チェーンの例とそれらの違いを含む完全な定義が必要です。

ありがとう、

4

1 に答える 1

0

ハッシュ テーブル チェーンは、一種のハッシュ テーブルの実装です。ハッシュハッシュの衝突を減らすために使用されます。たとえば、A のハッシュ値が 100 という名前のアイテムがあり、別のアイテムがテーブル [100] に既に存在しているとします。アイテム A を入力するには、オープン アドレス ハッシュの場合、アイテム A はインデックス 101 でテーブルに挿入されます。これにより、ハッシュ衝突の可能性が追加されます (別のアイテムのハッシュ値が将来 101 である場合)。ハッシュテーブルチェーンはそうではありません。

于 2013-04-30T04:13:36.247 に答える