Sobes.tech
Junior — Middle

Vysvetlite rozdiely medzi metódami equals() a hashCode() v Jave a prečo sú spolu potrebné.

sobes.tech AI

Odpoveď od AI

Metódy equals() a hashCode() v Jave súvisia s porovnávaním objektov a ich používaním v kolekciách.

  • equals() určuje, či sú dva objekty rovnaké v zmysle (logicky). Predvolene, v triede Object, porovnáva referencie (t.j., či ide o tie isté objekty v pamäti), ale zvyčajne sa prepíše na porovnanie obsahu.

  • hashCode() vracia celé číslo — hash kód objektu. Používa sa napríklad v hash tabuľkách (HashMap, HashSet) na rýchle vyhľadávanie.

Je dôležité, aby ak sú dva objekty považované za rovnaké podľa equals(), mali aj rovnaký hashCode(). Táto pravidlo zabezpečuje správne fungovanie hashovaných kolekcií.

Príklad:

class Person {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return age == p.age && name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Tu equals() porovnáva polia, a hashCode() vracia hash založený na tých istých poliach, čo zabezpečuje konzistentnosť.