Auslastung und Kapazität der Hash-Tabelle
Wenn die Anzahl der Einträge in der Hash-Tabelle überschreitet das Produkt der Auslastung und der aktuellen Kapazität, wie die die Kapazität erhöht wird?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt es von der zugrunde liegenden Implementierung. Zum Beispiel in der HashMap der zugrunde liegenden storage-array:
Den Eintrag Objekt enthält den Schlüssel und den Wert. Wenn die Kapazität nicht ausreichend (wie Sie richtig gesagt, überschreitet das Produkt der Auslastung und der aktuellen Kapazität), wird ein neues array erstellt und die alten Werte werden kopiert, in es.
Sehen die sourcecode der HashMap für OpenJdk 7 und suchen für
void resize(int newCapacity)
. Die wichtigsten Zeilen in der Methode sind:threshold
ist die maximale Anzahl von Elementen, die enthalten sein können, vor der Erhöhung der Größe wieder.transfer()
auch aufwärmt Elemente, also Elemente werden wahrscheinlich gespeichert in verschiedenen array-Indizes im Vergleich zu Ihrer ursprünglichen position. Sie können Blick auf den code, ist überraschend einfach zu Lesen.Den load-Faktor ist ein Maß dafür, wie voll die hash-Tabelle erlaubt zu bekommen, bevor seine Kapazität automatisch erhöht. Wenn die Anzahl der Einträge in der Hash-Tabelle überschreitet das Produkt der Auslastung und der aktuellen Kapazität, die Kapazität erhöht wird durch den Aufruf der Methode rehash.
hier ein überblick der Aufguss-Methode
Wie Sie sehen können, eigentlich eine Verdoppelung der Kapazität der Eintrag [], wenn das Produkt der Auslastung und der aktuellen Kapazität erhöht die Schwelle.
finden Sie in der Aufguss-Methode der hashtable-für mehr details.
Aufguss-Methode
Wenn Sie erstellen eine neue Hashtabelle erstellt, ist es mit einer Standard-Größe und Auslastung.
Quellcode
Wenn Sie das hinzufügen von Elementen in es
prüft es die
bzw. erstellt ein neues array und kopiert als Stivlo sagte.
private transient Entry[] Tabelle;