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 metequals: als twee objecten gelijk zijn volgensequals, 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;
}
}