Sobes.tech
Middle

Wat zijn de regels voor de methods equals en hashCode?

sobes.tech AI

Antwoord van AI

  1. Als twee objecten gelijk zijn volgens de methode equals(Object), moeten hun hash-codes (teruggegeven door de methode hashCode()) gelijk zijn.
  2. Als twee objecten niet gelijk zijn volgens de methode equals(Object), kunnen hun hash-codes gelijk of verschillend zijn. Het is een goede praktijk om verschillende hash-codes te garanderen voor niet-gelijke objecten om de prestaties van hash-gebaseerde collecties te verbeteren.
  3. De methode hashCode() moet voor hetzelfde object bij meerdere aanroepen dezelfde waarden teruggeven, zolang de informatie die wordt gebruikt voor het berekenen van de hash niet is gewijzigd.
  4. Symmetrie: voor elk object a en b, als a.equals(b) true is, dan moet b.equals(a) ook true zijn.
  5. Reflexiviteit: voor elk niet-null object a, moet a.equals(a) true zijn.
  6. Transitiviteit: voor elk object a, b en c, als a.equals(b) true is en b.equals(c) true is, dan moet a.equals(c) ook true zijn.
  7. Consistentie: voor elk niet-null object a en b, moeten meerdere aanroepen van a.equals(b) consequent true of false teruggeven, zolang de informatie die wordt gebruikt in de equals(Object)-vergelijkingen niet is gewijzigd.

Voorbeeldimplementatie:

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) {
        // Identiteitscontrole
        if (this == o) {
            return true;
        }
        // Typecontrole
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Casting
        MyClass myClass = (MyClass) o;
        // Vergelijking op velden
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // Gebruik van Objects.equals voor null-behandeling
    }

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

    // Andere methoden...
}