Nach dem Lesen source code von java.util.HashMap#resize
, bin ich sehr verwirrt mit einem Teil - das ist, wenn einige bin
mehr als einen Knoten hat.verwirrt über hashmap # Größe ändern
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;
}
}
Warum fühle ich diesen Teil ist nicht notwendig zu existieren? Verwenden Sie einfach den folgenden Code
newTab[e.hash & (newCap - 1)] = e;
ist in Ordnung - ich denke, sie haben den gleichen Effekt.
Warum also so viel Code in der else-Zweig haben?
@ShayHaned Huh? – Michael
Danke! aber vielleicht hast du mich falsch verstanden, ich bin nicht verwirrt von 'e.hash & (newCap - 1)'. Ich bin verwirrt, warum in der else-Zweig so viele Code brauche ich denke, nur verwenden newTab [e.hash & (newCap - 1)] = e; 'könnte den gleichen Effekt haben. – zhuguowei
@zhuguowei, sorry in diesem Fall, wirklich missverstanden Sie, auch den blöden Kommentar gelöscht :) – ShayHaned