0

Java の get(Object key) メソッド内に、理解できないコードがあります。

2 つのオブジェクトのハッシュコードが同じ場合でも、get(key) メソッドがどのように機能するかを知っています。

しかし、以下のコードは理解できません。

for (Entry<K,V> e = table[indexFor(hash, table.length)];
              e != null;
              e = e.next) {
             Object k;
             if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                 return e.value;
         }

誰かが説明できますか。ありがとう

4

1 に答える 1

1

HashMapハッシュ バケット アルゴリズムで動作します。HashMapまた、ハッシュ バケットは、クラスが として呼び出す配列として配置されtableます。したがって、forループはハッシュ バケットの最初の要素から始まります。key

Entry<K,V> e = table[indexFor(hash, table.length)

ここで、はそのバケットのハッシュ インデックスhashを表します


forバケットに要素が存在するまでループが実行されます ( e != null)


forループは のよう e = e.nextに繰り返されます。つまり、一致が見つかるまでバケット内の次の要素に移動します。


これで、ハッシュ バケットが見つかったら、メソッドは渡された と一致するキーを持つ正確なエントリを返す必要がありますkey。現在、このマッチングは、参照マッチング( ==) または等号マッチングのいずれかによって行われます。 (k = e.key) == key || key.equals(k)

一致した場合はキーが返され、それ以外の場合はメソッドが返されますnull

于 2013-08-10T08:54:29.123 に答える