Sobes.tech
Junior — Middle

Millised on põhialused seose vahel meetodite equals ja hashCode Java keeles?

sobes.tech AI

Vastus AI-lt

Java-s equals ja hashCode vahelised põhialused:

  • Kui kaks objekti on võrdsed vastavalt equals-ile, siis nende hashCode peab olema sama.
  • Kui kahe objekti hashCode on erinev, peab equals kindlasti tagastama false.
  • Kui equals tagastab false, võib hashCode olla sama, kuid see ei ole soovitatav, kuna see halvendab hash-struktuuride jõudlust.

See tagab hashimist kasutavate kogumike (HashMap, HashSet) õige toimimise, kus hashCode määrab korvi ja equals teostab objekti täpse võrdluse.

Näide:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return Objects.equals(id, person.id);
}

@Override
public int hashCode() {
    return Objects.hash(id);
}

Siin põhinevad equals ja hashCode samal väljal – id, mis tagab nende kooskõla.