Sobes.tech
Junior — Middle

Selgitage Java's equals() ja hashCode() meetodite erinevusi ning miks need koos vajalikud.

sobes.tech AI

Vastus AI-lt

Java equals() ja hashCode() meetodid on seotud objektide võrdlemise ja nende kasutamisega kogumites.

  • equals() määrab, kas kaks objekti on sisuliselt võrdsed (loogiliselt). Vaikimisi, Object klassis, võrdleb see viiteid (st. kas need on samad objektid mälus), kuid tavaliselt ülekirjutatakse sisu võrdlemiseks.

  • hashCode() tagastab täisarvu — objekti hash-koodi. Seda kasutatakse näiteks hash-tabelites (HashMap, HashSet) kiireks otsinguks.

Oluline on, et kui kaks objekti peetakse equals() järgi võrdsed, peaksid neil olema sama hashCode(). See reegel tagab hash-põhiste kogumite korrektse toimimise.

Näide:

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);
    }
}

Siin equals() võrdleb välju, ja hashCode() tagastab sama hashi, mis põhineb nende väljade väärtustel, tagades järjepidevuse.