Sobes.tech
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.