Sobes.tech
Middle

Welche Regeln gibt es für die Methoden equals und hashCode?

sobes.tech KI

Antwort von AI

  1. Wenn zwei Objekte nach der Methode equals(Object) gleich sind, müssen ihre Hash-Codes (zurückgegeben durch die Methode hashCode()) gleich sein.
  2. Wenn zwei Objekte nach der Methode equals(Object) ungleich sind, können ihre Hash-Codes gleich oder unterschiedlich sein. Es ist eine gute Praxis, unterschiedliche Hash-Codes für ungleiche Objekte zu gewährleisten, um die Leistung hashbasierter Sammlungen zu verbessern.
  3. Die Methode hashCode() sollte für dasselbe Objekt bei mehreren Aufrufen gleiche Werte zurückgeben, solange sich die für die Hash-Berechnung verwendeten Informationen nicht geändert haben.
  4. Symmetrie: Für beliebige Objekte a und b, wenn a.equals(b) true ist, dann sollte auch b.equals(a) true sein.
  5. Reflexivität: Für jedes nicht-null-Objekt a sollte a.equals(a) true sein.
  6. Transitivität: Für beliebige Objekte a, b und c, wenn a.equals(b) true und b.equals(c) true ist, dann sollte auch a.equals(c) true sein.
  7. Konsistenz: Für beliebige nicht-null-Objekte a und b sollten wiederholte Aufrufe von a.equals(b) konsistent true oder false zurückgeben, solange sich die für die equals()-Vergleiche verwendeten Informationen nicht geändert haben.

Beispielimplementierung:

public class MyClass {

    private int value;
    private String name;

    public MyClass(int value, String name) {
        this.value = value;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        // Identitätsprüfung
        if (this == o) {
            return true;
        }
        // Typprüfung
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Cast
        MyClass myClass = (MyClass) o;
        // Feldvergleich
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // Verwendung von Objects.equals für nullsicherheit
    }

    @Override
    public int hashCode() {
        // Verwendung von Objects.hash
        return Objects.hash(value, name);
    }

    // Weitere Methoden...
}