Warum ist es notwendig, die Methoden hashCode und equals zu überschreiben, wenn gleiche Objekte zu einem HashSet hinzugefügt werden?
sobes.tech KI
Antwort von AI
HashSet in Java verwendet eine Hashtabelle zur Speicherung von Elementen. Um korrekt zu bestimmen, ob zwei Objekte gleich sind und Duplikate zu vermeiden, stützt sich HashSet auf die Methoden hashCode() und equals().
- Die Methode
hashCode()berechnet den Hash-Code des Objekts, der bestimmt, in welche "Korb" (Bucket) in der Hashtabelle es einsortiert wird. - Die Methode
equals()vergleicht zwei Objekte auf Gleichheit.
Wenn du diese Methoden in deiner Klasse nicht überschreibst, wird die Implementierung aus der Klasse Object verwendet, die Objekte anhand ihrer Referenz vergleicht (d.h., zwei verschiedene Objekte mit denselben Daten werden als unterschiedlich betrachtet).
Daher ist es notwendig, hashCode() und equals() so zu überschreiben, dass sie die bedeutenden Felder des Objekts berücksichtigen, damit HashSet korrekt gleiche Objekte erkennt und keine Duplikate zulässt.
Beispiel:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2.equals(myClass.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Ohne dies kann HashSet mehrere Objekte mit denselben Daten speichern, was die Logik der Menge verletzt.