Wozu dienen die Methoden equals und hashCode in Java?
sobes.tech KI
Antwort von AI
Die Methoden equals und hashCode in Java werden verwendet, um Objekte korrekt zu vergleichen und mit auf Hash-Tabellen basierenden Sammlungen zu arbeiten (z.B. HashMap, HashSet).
-
equals(Object o): Bestimmt, ob das aktuelle Objekt einem anderen Objekt entspricht. Standardmäßig vergleicht es die Referenzen der Objekte. Überschrieben, um den internen Zustand der Objekte zu vergleichen. -
hashCode(): Gibt einen ganzzahligen Wert (Hash-Code) des Objekts zurück. Wird von Sammlungen verwendet, um Elemente schnell zu finden. Muss mitequalsübereinstimmen: Wenn zwei Objekte nachequalsgleich sind, müssen ihre Hash-Codes gleich sein. Die umgekehrte Aussage ist falsch.
Falsche oder fehlende Überschreibungen dieser Methoden können zu inkorrektem Verhalten bei der Verwendung von Objekten in Sammlungen führen, z.B. das Objekt ist nach Hinzufügen nicht im Set enthalten oder es kann nicht anhand des Schlüssels im HashMap gefunden werden.
Beispiel für die Überschreibung:
public class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true; // Referenzvergleich
if (o == null || getClass() != o.getClass()) return false; // Typ- und null-Check
MyObject that = (MyObject) o; // Cast
if (id != that.id) return false; // Feldvergleich
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
int result = id; // Hash-Code-Berechnung basierend auf Feldern
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}