der Quellcode ist wie folgt:Eine Sache in der Methode "Transfer" in HashMap (jdk 1.6)?
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry<K,V> e = src[j];
if (e != null) {
src[j] = null;
do {
Entry<K,V> next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
aber ich möchte, wie dies zu tun, funktioniert das gut oder irgendein Problem? Ich denke, der Hash-Wert aller Elemente in der gleichen Liste ist gleich, so dass wir den buketIndex der neuen Tabelle nicht berechnen müssen, das einzige, was wir tun sollten, ist das Kopfelement in die neue Tabelle zu übertragen, und dies wird Zeit sparen. Vielen Dank für Ihre Antwort.
void transfer(Entry[] newTable){
Entry[] src = table;
int newCapacity = newTable.length;
for(int j = 0 ;j< src.length;j++){
Entry<K,V> e = src[j];
if(null != e){
src[j] = null;
int i = indexFor(e.hash,newCapacity);
newTable[i] = e;
}
}
}
Oh, vielen Dank, ich habe es; Da diese Standardklassen so gut sind, möchte ich studieren und möchte mich selbst von diesen großartigen Menschen verbessern. – CAFEBABY
wie Sie sagen: "Das Problem ist, dass die Hash-Ketten in der Regel Einträge mit mehreren verschiedenen Hashcodes enthalten.", Ich kann Ihnen nicht zustimmen, meiner Meinung nach sollte jedes Element (Entry) in der gleichen Hash-Kette den gleichen Hash haben Wert, wenn nicht, warum sind sie in der gleichen Kette? Und ich finde das Problem ist, dass die verschiedenen Hash-Ketten wahrscheinlich den gleichen buketIndex haben, wenn ich rehash, anders denke ich nichts; Natürlich hat meine Optimierung Probleme. – CAFEBABY
Sie alle haben den gleichen Bucket-Index in der OLD-Tabelle, aber in der NEW-Tabelle wird die Größe und somit der Bucket-Index ('hashCode()% size') wahrscheinlich für jeden Eintrag unterschiedlich sein. Sie machen gefährliche Sprünge von "Ich verstehe nicht, wie das funktioniert" bis "dieser Code (oder Erklärung) muss falsch sein, weil es keinen Sinn für mich *** ***". Hören Sie so schnell wie möglich auf und Sie werden viel leichter neue Dinge lernen. Du hast noch eine Menge neuer Dinge zu lernen. –