source codeのjava.util.HashMap#resize
を読んだ後、私はいくつかの部分と非常に混同しています。つまり、bin
に複数のノードがある場合です。ハッシュマップについての混乱#resize
else { // preserve order
Node<K,V> loHead = null, loTail = null;
Node<K,V> hiHead = null, hiTail = null;
Node<K,V> next;
do {
next = e.next;
if ((e.hash & oldCap) == 0) {
if (loTail == null)
loHead = e;
else
loTail.next = e;
loTail = e;
}
else {
if (hiTail == null)
hiHead = e;
else
hiTail.next = e;
hiTail = e;
}
} while ((e = next) != null);
if (loTail != null) {
loTail.next = null;
newTab[j] = loHead;
}
if (hiTail != null) {
hiTail.next = null;
newTab[j + oldCap] = hiHead;
}
}
なぜ私はこの部分が存在する必要はないと感じますか?以下のコードを使用してください
newTab[e.hash & (newCap - 1)] = e;
は、私も同じ効果があると思います。
なぜ、他のブランチに非常に多くのコードがあるのでしょうか?
@ShayHanedえっ? – Michael
ありがとう!しかし、あなたは私を誤解したかもしれません、私は 'e.hash&(newCap - 1)'と混同しません。私は、なぜelseブランチで、 'newTab [e.hash&(newCap - 1)] = e;'を使うのが同じような効果があるのだろうと思っているのか混乱しています。 – zhuguowei
@ zhuguowei、その場合はごめんなさい、本当にあなたを誤解した、また愚かなコメントを削除しました:) – ShayHaned