3
ハッシュテーブルの値はどのように物理的にメモリに格納されますか?
質問: 効率的に使用され、値を頻繁に再配置する必要がない場合に、ハッシュテーブルの値はどのようにメモリに格納されますか? 私の現在の理解(間違っている可能性があります): ハッシュテーブルに3つのオブジェクトが格納されているとしましょう。それらのハッシュ関数はこれらの値を生成します: 0 10 20 これらのオブジェクトのポインタは、次のメモリアドレスに格納されません。これらのオブジェクト間には大きなギャップがあるためです。 startOfHashTable + 0 startOfHashTable + 10 startOfHashTable + 20 ハッシュテーブル上のWikipediaの記事は、「インデックス」とは、のように計算されていることを述べています: hash = hashfunc(key) index = hash % array_size したがって、私の例では、インデックスは次のようになります。 0%3 = 0 10%3 = 1 20%3 = 2 これにより、前述の大きなギャップが解消されます。このモジュロスキームを使用しても、ハッシュテーブルにさらにオブジェクトを追加すると問題が発生します。ハッシュテーブルに4番目のオブジェクトを追加すると、インデックスを取得するために%4を適用する必要があります。これで、過去に行った%3はすべて無効になりませんか?以前の%3のすべてを%4の場所に再配置する必要がありますか?