Sobes.tech
Junior

Waarvoor dienen de methoden equals en hashCode in Java?

sobes.tech AI

Antwoord van AI

De methoden equals en hashCode in Java worden gebruikt om objecten correct te vergelijken en om te werken met op hash-tabellen gebaseerde collecties (bijvoorbeeld HashMap, HashSet).

  • equals(Object o): Bepaalt of het huidige object gelijk is aan een ander object. Standaard vergelijkt het de referenties van de objecten. Wordt overschreven om de interne toestand van de objecten te vergelijken.

  • hashCode(): Geeft een geheel getal (hash-code) van het object terug. Wordt door collecties gebruikt om snel elementen te vinden. Moet in overeenstemming zijn met equals: als twee objecten gelijk zijn volgens equals, moeten hun hash-codes gelijk zijn. De omgekeerde bewering is niet waar.

Een onjuiste implementatie of het ontbreken van overschrijving van deze methoden kan leiden tot incorrect gedrag bij het gebruik van objecten in collecties, zoals het ontbreken van een object in een Set na toevoeging of het niet kunnen vinden van een object in een HashMap via de sleutel.

Voorbeeld van overschrijving:

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; // Referentie vergelijking
        if (o == null || getClass() != o.getClass()) return false; // Type en null controle

        MyObject that = (MyObject) o; // Casting

        if (id != that.id) return false; // Veld vergelijking
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Hash-code berekening op basis van velden
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}