„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie wirkt sich das Überschreiben von „hashCode()“ und „equals()“ auf die HashMap-Leistung aus?

Wie wirkt sich das Überschreiben von „hashCode()“ und „equals()“ auf die HashMap-Leistung aus?

Veröffentlicht am 07.11.2024
Durchsuche:884

How Does Overriding `hashCode()` and `equals()` Impact HashMap Performance?

Verstehen, wie equal und hashCode in einer HashMap funktionieren

HashMap in Java verwendet eine Kombination aus den Methoden hashCode() und equal(), um Schlüsselwerte effizient zu speichern und abzurufen Paare. Beim Hinzufügen eines neuen Schlüssel-Wert-Paares wird zunächst die Methode hashCode() des Schlüssels berechnet, um den Hash-Bucket zu bestimmen, in dem der Eintrag platziert wird. Die Methode equal() wird dann verwendet, um im ausgewählten Bucket nach doppelten Schlüsseln zu suchen.

Im angegebenen Testcode definiert die ToDos-Klasse eine primitive Implementierung von equal(), um sicherzustellen, dass Objekte mit demselben Tagesfeld vorhanden sind werden als gleich angesehen. Wenn die Zeile // public int hashCode() { return 9; } unkommentiert ist, werden alle ToDos-Objekte, unabhängig von ihrem Tagesfeld, gezwungen, denselben hashCode()-Wert zurückzugeben. Dadurch werden alle ToDos-Objekte unabhängig von ihrem Tagesfeld demselben Hash-Bucket zugeordnet.

Wenn die Methode „map.size()“ mit der auskommentierten Zeile aufgerufen wird, werden die ToDos-Objekte mit unterschiedlichen Tagen versehen Felder (t1, t2, t3) werden aufgrund ihrer unterschiedlichen hashCode()-Werte in verschiedenen Hash-Buckets platziert. Folglich gibt „map.size()“ genau die Anzahl von drei zurück.

Umgekehrt werden die ToDos-Objekte, wenn die Zeile nicht auskommentiert ist, alle demselben Hash-Bucket zugeordnet, und die Methode „map.size()“ gibt anschließend zurück eine Zählung von zwei. Dies liegt daran, dass die HashMap alle ToDos-Objekte als „logisch äquivalent“ betrachtet, da sie denselben hashCode()-Wert zurückgeben.

Zusammenfassend ist die Verwendung der Methoden hashCode() und equal() entscheidend für den effizienten Betrieb von HashMap. Durch das Überschreiben nur der hashCode()-Methode ist es wichtig sicherzustellen, dass logisch äquivalente Schlüssel konsistente hashCode()-Werte generieren. Das Überschreiben nur der Methode equal() kann zu Leistungsproblemen führen, da zur Bestimmung der logischen Äquivalenz mehr Vergleiche erforderlich sind. Das richtige Gleichgewicht zwischen effizientem Hashing über hashCode() und der Gewährleistung der Objektgleichheit durch equal() zu finden, ist der Schlüssel zur optimalen HashMap-Nutzung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3