Gibt es ein Szenario, in dem die Hashmap-Implementierung von Java7 der Java8-Implementierung vorgezogen wird?

9

Ab Java8 verhält sich unser geliebtes HashMap ein wenig anders. Wenn der Schlüssel eine vergleichbare Schnittstelle implementiert, würde jeder Hash eine ausgeglichene Struktur anstelle einer verknüpften Liste enthalten.

Dies reduziert die Komplexität der schlimmsten Zeit im Falle von Kollisionen von O(n) auf O(log(n)) , siehe JEP180

Gibt es eine Situation, in der ein Upgrade von Java7 auf Java8 zu einer Verschlechterung der Leistung von HashMap führen würde?

    
Uri Goren 30.11.2016, 09:34
quelle

1 Antwort

2

Java8 verwendet einen ausgeglichenen Baum in der Anzahl der Einträge im Bucket in & gt; N, wobei N ausgewählt ist empirisch , und benutze die Liste noch einmal, wenn diese Zahl & lt; K. Ich würde eine schlechtere Leistung erwarten, wenn sich die Anzahl der Einträge im Bucket so ändert, dass "treefyng / unretifying" häufig auftritt. Dies kann aufgrund einer bestimmten Hash-Funktion passieren.

Ich bin mir auch nicht sicher, ob der Overhead für das Erstellen und Abfragen von Bäumen den Gewinn für kleine N wert ist.

    
dveim 30.11.2016, 10:01
quelle

Tags und Links