Lesen Sie die Java HashMap-Quelle

Eine schlampige Hash-Tabelle sollte auf Implementierungsebene verstanden werden. Notieren Sie sich also, was Sie beim kurzen Lesen bemerkt haben. Ich konnte es vor 10 Jahren nicht lesen, aber diesmal konnte ich es schnell lesen. (Ich habe Adopt Open JDK 13 gelesen)

Innerhalb der Tabelle wurden Daten von den folgenden Klassen verwaltet. Kurz gesagt, es wird durch Closed Addressing implementiert.

static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;

/ ** Mittlere Kleidung * / }

Abgesehen davon war die Unified Map der Eclipse-Sammlung (10.1) ebenfalls Open Addressing, dies wurde jedoch in einem Array anstatt mit einem Zeiger verkettet. Es scheint, dass der Grund darin besteht, dass Sie den Speichercache wie Open Addressing effektiv machen möchten.

Hash-Wert-Berechnung. Wenn die Anzahl der Elemente klein ist, werden die oberen 16 Bits zu den unteren 16 Bits XOR-verknüpft, um zu vermeiden, dass der Speicherort nur durch die unteren Bits bestimmt wird, so dass auch die oberen Bits verwendet werden können.

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

Wie man die Hash-Tabelle nachschlägt. Der Index war der Wert, der durch Subtrahieren von 1 von der Anzahl der Elemente n in der Tabelle und Ausführen einer UND-Operation erhalten wurde.

if ((p = tab[i = (n - 1) & hash]) == null)
    tab[i] = newNode(hash, key, value, null);

Übrigens scheint die Anzahl der Elemente in der Tabelle (tab.length oben) ein Vielfaches von 2 zu sein, und wenn -1 daraus gesetzt wird, werden alle Bits gesetzt, so dass es den Anschein hat, als würde die Operation die unteren Bits verlassen.

Recommended Posts

Lesen Sie die Java HashMap-Quelle
Java HashMap-Klasse
Lesen Sie JSON in Java
Kommentare in der Java-Quelle
Java (geteilte Quelldatei)
Eval Java-Quelle von Java
Lesen Sie Binärdateien in Java 1
Lesen Sie die Standardeingabe in Java
Lesen Sie Binärdateien in Java 2
[Java] Tipps zum Schreiben der Quelle
[Java] [Android] INI-Datei lesen
Java-Anfänger lesen Hello World
Java HashMap, entrySet [Persönliches Memo]
Einfaches Lesen von Textdateien in Java (Java 11 & Java 7)
[Java] Unterschied zwischen Hashmap und HashTable
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Lesen Sie CSV in Java (Super CSV Annotation)
Ich habe die Quelle von Integer gelesen
Ich habe die Quelle von Long gelesen
Java
Java-Quellcode zum Lesen der Klasse java.lang.Math
Ich habe die Quelle von Short gelesen
Java
Ich habe die Quelle von Byte gelesen
Java HashMap Transform js json Formal
Ich habe die Quelle von String gelesen
Grundstruktur des Java-Quellcodes
Java für alle! Ich habe jedermanns Java #minjava gelesen
[JAWS-UG CLI] CodeBuild: # 1 Erstellen von Quellcode (Java)
[Read Effective Java] Kapitel 2 Punkt 7 "Vermeiden Sie Finalizer"
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Lesen Sie die xlsx-Datei in Java mit Selenium
[Java] Fluss vom Quellcode zur Ausführung
HashMap # putAll () verhält sich zwischen Java 7 und Java 8 unterschiedlich