Junior — Middle
Zašto je potrebno prepisati metode hashCode i equals prilikom dodavanja istih objekata u HashSet?
sobes.tech АИ
Одговор од АИ
HashSet u Javi koristi hash tabelu za skladištenje elemenata. Da bi pravilno odredio da li su dva objekta ista i da ne dodaje duplikate, HashSet se oslanja na metode hashCode() i equals().
- Metoda
hashCode()izračunava hash kod objekta, koji određuje u koju "korpu" (bucket) u hash tabeli će biti smešten. - Metoda
equals()poredi dva objekta na jednakost.
Ako ne prepisujete ove metode u svojoj klasi, koristiće se implementacija iz klase Object, koja poredi objekte po referenci (tj. dva različita objekta sa istim podacima će se smatrati različitim).
Zato je potrebno prepisati hashCode() i equals() tako da uzimaju u obzir važne polja objekta.
Primer:
@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);
}
Bez ovoga, HashSet može da čuva više objekata sa istim podacima, što narušava logiku skupa.