Interne Implementierung von java.util.HashMap und HashSet
Ich habe versucht, die interne Implementierung von zu verstehenjava.util.HashMap
undjava.util.HashSet
.
Im Folgenden sind die Zweifel, die für eine Weile in meinem Kopf auftauchen:
Was ist die Bedeutung der@Override public int hashcode()
in einer HashMap / HashSet? Wo wird dieser Hash-Code intern verwendet?Ich habe allgemein gesehen, dass der Schlüssel der HashMap ein istString
mögenmyMap<String,Object>
. Kann ich die Werte gegen abbildensomeObject
(anstelle von String) wiemyMap<someObject, Object>
? Welche Verträge muss ich einhalten, damit dies erfolgreich abläuft?Danke im Voraus !
BEARBEITEN:
Wollen wir damit sagen, dass der Hash-Code des Schlüssels (check!) Das ist, gegen das der Wert in der Hash-Tabelle abgebildet wird? Und wenn wir es tunmyMap.get(someKey);
Java ruft intern ansomeKey.hashCode()
Soll die Zahl in der Hash-Tabelle nach dem resultierenden Wert durchsucht werden?Antworten: Ja.
EDIT 2:
In einemjava.util.HashSet
Woher wird der Schlüssel für die Hash-Tabelle generiert? Ist es von dem Objekt, das wir hinzufügen, z.mySet.add(myObject);
dannmyObject.hashCode()
wird entscheiden, wo dies in der Hash-Tabelle platziert wird? (da wir in einem HashSet keine Schlüssel vergeben).Antworten: Das hinzugefügte Objekt wird zum Schlüssel. Der Wert ist Dummy!