イゴール・ウィルシャー:
私はどのように勉強していHashMap
た作品の内側とは、この方法を理解することはできません。
void addEntry(int hash, K key, V value, int bucketIndex) { Entry<K,V> e = table[bucketIndex]; table[bucketIndex] = new Entry<K,V>(hash, key, value, e); if (size++ >= threshold) resize(2 * table.length);
オブジェクトは、なぜe
アドレス(または何ここで起こる?)のを取得table[bucketIndex]
して、これはtable[bucketIndex]
新しいを取得しますか?ちょうど下にあるものを使用しなかった理由は、何ですか?Entry(hash, key, value, e)
Entry<K,V> e = new Entry<K,V>(hash, key, value)
table[bucketIndex] = e;
ビクターStafusa:
で衝突があるかもしれないのでHashMap
(同じ生成すなわち異なるキーbucketIndex
)。彼らはあなたが示唆して何をした場合、衝突の場合には、最後に挿入された要素は、おそらく事実上予測不可能な方法で、衝突の場合には、以前のものを削除します。
Entry
それは実際にビットがmisnamedで、実際にはエントリのリンクリストのノードで、リンクリストのいくつかの並べ替えとして実装されています。これが理由でもあるe
の最後のパラメータとして渡されるEntry
コンストラクタ。
新しい作成Entry
(前のものを指すことをe
)と同じ場所にそれを追加e
したことは、リンクされたリストのbegginingで新しいノードを挿入する操作であり、あっても作品e
でしたnull
(衝突時には、すなわちありませんでしたすべておよび作成Entry
与えられたとの最初のものがありますbucketIndex
)。