Junior — Middle
Waarom is het nodig om de methoden hashCode en equals te overschrijven bij het toevoegen van gelijke objecten aan een HashSet?
sobes.tech AI
Antwoord van AI
HashSet in Java gebruikt een hash-tabel om elementen op te slaan. Om correct te bepalen of twee objecten gelijk zijn en dubbele invoer te voorkomen, vertrouwt HashSet op de methoden hashCode() en equals().
- De methode
hashCode()berekent de hash-code van het object, die bepaalt in welke "mand" (bucket) in de hash-tabel het wordt geplaatst. - De methode
equals()vergelijkt twee objecten op gelijkheid.
Als je deze methoden niet overschrijft in je klasse, wordt de implementatie van de klasse Object gebruikt, die objecten vergelijkt op referentie (d.w.z. twee verschillende objecten met dezelfde gegevens worden als verschillend beschouwd).
Daarom is het noodzakelijk om hashCode() en equals() te overschrijven zodat ze de belangrijke velden van het object in overweging nemen.
Voorbeeld:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2.equals(myClass.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Zonder dit kan HashSet meerdere objecten met dezelfde gegevens opslaan, wat de logica van de verzameling schaadt.