English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
HashMap Erweiterung
Einleitung:
Wenn die Größe von HashMap größer gleich(Kapazität*Lastfaktor)ausgelöst wird, ist dies ein teurer Vorgang.
Warum erweitern?63;Die Standardkapazität von HashMap ist16,da mit zunehmendem Hinzufügen von Elementen in die HashMap die Wahrscheinlichkeit von Hash-Kollisionen höher wird, daher wird die Liste für jede Bucket länger sein,
Dies beeinflusst die Suchleistung, da jedes Mal, wenn ein Element hinzugefügt wird, der Hash durchsucht und verglichen wird, bis das Element gefunden wird.
Um die Suchleistung zu verbessern, kann nur erweitert werden, um Hash-Kollisionen zu verringern und sicherzustellen, dass die Elemente der Schlüssel so gleichmäßig wie möglich verteilt sind.
Erweiterungspunkte
Der Standardwert für den Lastfaktor ist 0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;
Die Standardkapazität ist16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // =16
HashMap bietet einen Konstruktor, um bei der Erstellung Kapazität und Lastfaktor zu spezifizieren.
public HashMap(int initialCapacity, float loadFactor)
Unter Standardbedingungen, wenn die Größe der HashMap größer gleich16*0.75=12bedeutet
wenn mindestens ein Element in jedem Entry (oder auch Bucket) vorhanden ist, wird erweitert.
if ((size >= threshold) && (null != table[bucketIndex])) { resize(2 * table.length); hash = (null != key) ? hash(key) : 0; bucketIndex = indexFor(hash, table.length); }
Bei der Erweiterung verdoppelt sich die Kapazität des Containers
resize(2 * table.length);
Bei der Erweiterung ist eine Neuberechnung der Array-Indizes der Elemente erforderlich
1、neue Entry-Array zuweisen
2、neu berechnen des Index des ursprünglichen Elements im neuen Array(ressourcenintensiv)
Vielen Dank für das Lesen, hoffentlich kann dies jedem helfen, vielen Dank für die Unterstützung dieser Website!