Heim  >  Artikel  >  Java  >  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?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 17:51:02789Durchsuche

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, wenn die Zeile nicht auskommentiert ist, alle ToDos-Objekte demselben Hash-Bucket zugeordnet, wobei die Methode map.size() anschließend zurückkehrt 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.

Das obige ist der detaillierte Inhalt vonWie wirkt sich das Überschreiben von „hashCode()“ und „equals()“ auf die HashMap-Leistung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn