제이온

equals() vs. hashCode()

  • Verfasst in: Koreanisch
  • Land: Alle Ländercountry-flag
  • IT

Erstellt: 2024-04-25

Erstellt: 2024-04-25 22:29

equals()

equals() vergleicht den Inhalt von Objekten. Dies wird oft als Gleichheitsvergleich bezeichnet. Wenn equals() nicht überschrieben wird, ist es intern dasselbe wie ==, wodurch ein Identitätsvergleich durchgeführt wird. Daher muss equals() unbedingt verwendet werden, wenn Objekte korrekt auf Gleichheit verglichen werden sollen.



hashCode()

hashCode() prüft, ob zwei Objekte dasselbe Objekt sind. Es hat die gleiche Funktionalität wie der Identitätsvergleich mit ==, aber die hashCode()-Methode gibt als Rückgabewert einen eindeutigen ganzzahligen Wert des Objekts während der Laufzeit zurück. In der Regel wird die Speicheradresse des Objekts zurückgegeben, die im Heap gespeichert ist.



Diese Methode hat das Schlüsselwort native. Dies ist ein Schlüsselwort, das verwendet wird, wenn eine in einer anderen Sprache als Java entwickelte Sprache in Java verwendet wird.


Was ist ein Hash?

Hashing ist der Prozess der Verwendung einer Hash-Funktion, um aus einem Eingabewert variabler Größe einen Ausgabewert fester Größe zu generieren. Der durch Hashing erhaltene Wert wird als Hashcode bezeichnet.


equals() und hashCode()

Da dasselbe Objekt dieselbe Speicheradresse haben muss, ist es selbstverständlich, dass dasselbe Objekt denselben Hashcode haben muss. Daher ist es ratsam, neben equals() auch hashCode() zu überschreiben, um sicherzustellen, dass derselbe Hashcode zurückgegeben wird.


Hash-Datenstruktur


Fügen wir wie oben zwei gleiche Objekte in die HashSet-Datenstruktur ein. Wenn wir die Größe dieses Sets ausgeben, erhalten wir 2. Warum ist das so?


Dies liegt daran, dass Datenstrukturen, die Hashing verwenden, hashCode() verwenden, um den Schlüssel zu bestimmen. Das heißt, bevor geprüft wird, ob Objekte gleich sind, wird geprüft, ob die Hashcodes der beiden Objekte gleich sind, und danach wird geprüft, ob die beiden Objekte gleich sind. Wenn hashCode() nicht überschrieben wird, wird hashCode() von Object verwendet, wodurch die Speicheradresse zurückgegeben wird, an der jedes Objekt gespeichert ist. Daher ist es ratsam, hashCode() neben equals() zu überschreiben, wenn Hash-Datenstrukturen verwendet werden.



Quelle


Erwartete Interviewfragen und Antworten

Warum werden equals() und hashCode() zusammen verwendet?

Datenstrukturen, die Hashing verwenden, verwenden hashCode(), um den Schlüssel zu bestimmen. Das heißt, bevor geprüft wird, ob Objekte gleich sind, wird geprüft, ob die Hashcodes der beiden Objekte gleich sind, und danach wird geprüft, ob die beiden Objekte gleich sind. Wenn hashCode() nicht überschrieben wird, wird hashCode() von Object verwendet, wodurch die Speicheradresse zurückgegeben wird, an der jedes Objekt gespeichert ist. Daher ist es ratsam, hashCode() neben equals() zu überschreiben, wenn Hash-Datenstrukturen verwendet werden.

Kommentare0