2012-04-16 6 views
-4

JavaのHashMapでは、ハッシュ値がバケットに格納されていることがわかりましたこれは高速検索に役立ちます。
取得中に、ハッシュコードがチェックされ、それに応じてバケット番号が検索されます。

バケット番号が1〜10であり、ハッシュコードから見つかったバケット番号がバケット番号5
である場合。
コントロールはどのようにバケット番号5に転送されますか?バケツ1を通ってバケット4に到達して5に達するか、それとも他のメカニズムを使用していますか?Hashmapはランダムアクセスを使用しますか?

+2

http://en.wikipedia.org/wiki/Hashmap ... –

+2

...またはデータ構造に関する優れた教科書を読んでください。 –

+0

あなたは宿題をそのようにマークする必要があります。 – Viruzzo

答えて

4

ハッシュテーブルはバケットの配列として実装されているため、配列のrandom accessインデックスを使用して、ハッシュが与えられたときに正しいバケットに到達します。

5

これはダイレクトアレイアクセスです。反復/トラバーサルはありません。しかし、それはオブジェクトの中を移動し、equalsと比較する必要があります。多分それはあなたを混乱させるでしょう。

2

だから、それは配列からランダムにアクセスいjava.util.HashMapをコード

  /** 
      * Adds a new entry with the specified key, value and hash code to 
      * the specified bucket. It is the responsibility of this 
      * method to resize the table if appropriate. 
      * 
      * Subclass overrides this to alter the behavior of put method. 
      */ 
     void addEntry(int hash, K key, V value, int bucketIndex) { 
      Entry<K,V> e = table[bucketIndex]; 
      table[bucketIndex] = new Entry<>(hash, key, value, e); 
      if (size++ >= threshold) 
       resize(2 * table.length); 
     } 

からの抜粋。

3

ハッシュ関数は、バケットの位置を特定するために使用されます。

10個のバケットがある場合、たとえばみましょう

はのは10個のバケット、

に文字列をマッピングするために些細なハッシュ関数を書いてみましょう文字列セットのために、文字値が10個のバケットに追加し、ハッシュ化されていることを言います
For any non empty String, 

      hash function f = sum of (index of characters) % 10 

例:abc = 1 + 2 + 3%10 = 6.したがって、「abc」は6番目のバケットになります。xyz = 24 + 25 + 25%10 = 7.5~8。だから "xyz"は8番目のバケツに終わります。

"xyz"を捜し出すと、ハッシュ関数はここで直接バケットを見つけます。

hash functionは、ハッシュマップの作業の中心にあります。バケット 配列の各スペースを連鎖直接に、追加し、値を取得するそのうちのいくつかは、直接chaningあり、オープンこれらの方法は、その店舗に基づきなど に対処し、例をchange.Forます値をフェッチ中

0

いくつかの戦略があります。同じ場所にハッシュされたキーと値のペアを含むリンクされたリストへのポインタです。値を検索すると、与えられた値でリスト全体をスキャンしています。

関連する問題