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,Objectklassis, 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.