2017-02-27 4 views
-2

HashMapまたはハッシュ技法が使用されている場所では、オブジェクトに対してhashcodeメソッドが呼び出され、Entryオブジェクトが格納されているバケットを見つけるために使用されるハッシュが計算されます。メモリロケーションを参照して、ハッシュに使用されるバケットは何ですか?

hascode()メソッドによって返された値は、メモリ上の場所ではありません。バケツのコンセプトは、メモリの場所を参照して正確には何ですか?

単一のメモリロケーションの場合は、マップエントリのリンクリストをどのように保持することができますか?

私はスタックで同様の質問を見つけましたが、バケツが本当に何であるかはっきりとは分かりません。バケツのコンセプトをクリアしてください。

+0

@EJPとして視覚化することができますJavaにはメモリの場所があります。私はすべての値が格納されているメモリの場所を参照していた – eccentricCoder

答えて

1

ハッシングでは、hashcode()の値によってバケットインデックスが決定されます。多くのオブジェクトは同じhashcode()値を持つことがあります。そのような場合、そのようなオブジェクトはすべて同じバケットにマップされます。

理論上のバケットは、すべてのそのようなオブジェクトのコンテナとして想像することができます。さまざまな方法で実装できます。これは "HashMap"実装の単純なリンクリストとして実装されています。つまり、バケットはリンクリストとして実装されています。各バケットはリンクされたリストであると想像することができます。

3つのオブジェクト(A、B、C)はバケット内に存在する場合、例えば、バケットはリンクリスト私はそれを言わなかったA-> B-> C->ヌル

1

ハッシュテーブルのバケットは、ほとんどの場合、配列インデックスにすぎません。

ハッシュ関数は、オブジェクトを配置する必要がある配列のインデックスを常に返します(または、要件に応じて任意の操作を行います)。したがって、メモリの管理方法を理解するには、配列にメモリがどのように割り当てられるかを理解する必要があります。

インデックスへの動的アクセスが完全に機能するように、連続したメモリ位置が与えられています。ハッシュテーブルは、同じインデックス

を返している、あなたがリンクされたリストまたはさらに値を格納するために別の配列にそのインデックスポイントを作ることができますどのような

これらの値にアクセスするときは、一定時間内にハッシュ関数から目的のインデックスに簡単にアクセスできます。インデックスが複数の値を保持している場合、インデックスがリンクリストを指していると仮定してそれらの値を反復処理できます。

この場合、リンク先リストは別の場所にあります。その場所の開始アドレスは、その配列インデックスによって指し示されます。

+0

ありがとう。私はバケツが記憶場所であることと混同されたインタビューでこの質問をしました。今すぐクリア – eccentricCoder

関連する問題