Junior — Middle
Kāpēc, pievienojot vienādus objektus HashSet, ir nepieciešams pārrakstīt hashCode un equals metodes?
sobes.tech AI
Atbilde no AI
Java HashSet izmanto haštabulu elementu glabāšanai. Lai pareizi noteiktu, vai divi objekti ir vienādi un novērstu dublikātus, HashSet balstās uz metodēm hashCode() un equals().
- Metode
hashCode()aprēķina objekta haškodu, kas nosaka, kurā "groziņā" (bucket) tas tiks ievietots haštabulā. - Metode
equals()salīdzina divus objektus pēc vienlīdzības.
Ja šīs metodes neizmainīsiet savā klasē, tiks izmantota Object klases realizācija, kas salīdzina objektus pēc atsaucēm (t.i., divi dažādi objekti ar vienādiem datiem tiks uzskatīti par dažādiem).
Tādēļ ir nepieciešams pārdefinēt hashCode() un equals() tā, lai ņemtu vērā objekta nozīmīgās laukus.
Piemērs:
@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 šī, HashSet var glabāt vairākus objektus ar vienādiem datiem, kas pārkāpj kopas loģiku.