Aufwärmen in Hashmap [geschlossen]

Die Anfangskapazität und der Belastungsfaktor sind zwei Parameter, die dieHashMap Performance. Der Standardladefaktor (.75) bietet einen guten Kompromiss zwischen Zeit- und Raumkosten. Höhere Werte verringern den Platzbedarf, erhöhen jedoch die Suchkosten.

Wenn ein Artikel zum hinzugefügt wirdHashMap, wird es auf der Grundlage eines daraus abgeleiteten Werts einem Eimer zugewiesenhashCode und die Eimergröße derHashMap. Um den Bucket für einen beliebigen zu identifizieren, verwenden Sie Hash-Mapkey.hashCode() und führen Sie eine Operation aus:

Bucket (index) = HashMap.indexFor(HashMap.hash(key.hashCode()),
                                  entryArray.length)

Wenn die Anzahl der Einträge in der Hash-Map das Produkt aus Ladefaktor und aktueller Kapazität überschreitet, wird die Hash-Map erneut aufbereitet (interne Datenstrukturen werden neu erstellt), sodass die Hash-Map ungefähr die doppelte Anzahl von Buckets enthält.

Wenn Sie alles neu aufbereiten und an einen neuen Ort verschieben (Eimer usw.), werden auch die älteren Elemente erneut aufbereitet und in dem neuen Eimer gemäß ihren neuen Hash-Codes gespeichert. Der alte Speicherplatz, auf dem die Elemente aufbewahrt wurden, ist Müll.

Wenn zwei Thread gleichzeitig das jetzt gefunden habenHashMap Die Größe muss geändert werden, und beide versuchen, die Größe zu ändernHashMap.

Über den Prozess der Größenänderung vonHashMapWenn das Element im Bucket, das in der verknüpften Liste gespeichert ist, während der Migration in einen neuen Bucket, weil Java, in der angegebenen Reihenfolge umgekehrt wirdHashMap Hängt das neue Element nicht an den Schwanz an, sondern an den Kopf, um ein Überqueren des Schwanzes zu vermeiden. Wenn eine Rennbedingung eintritt, kommt es zu einer Endlosschleife.

Ich habe folgende Fragen:

Warum wird die verknüpfte Liste für jeden Bucket bei der Migration auf einen neuen Bucket in der angegebenen Reihenfolge umgekehrt?Wie können Rennbedingungen zu Endlosschleifen führen?Wie kann durch Erhöhen der Anzahl von Eimern die Wartezeit für die Suche verkürzt werden?Elemente, die sich im selben Eimer befinden, befinden sich nach dem Aufwärmen immer noch im selben Eimer?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage