Junior — Middle
Milline vastastikune suhe peab olema Java's meetodite equals() ja hashCode() vahel, et objektid töötaksid korrektselt kogumites?
sobes.tech AI
Vastus AI-lt
Java-s peavad equals() ja hashCode() meetodid olema kooskõlas, et objektid töötaksid õigesti kogumites, eriti HashMap ja HashSet.
Põhireeglid:
- Kui kaks objekti on
equals()järgi võrdsed, peavad nendehashCode()meetodid tagastama sama väärtuse. - Kui
hashCode()kahe objekti puhul erineb, peetakse neid erinevateks jaequals()ei kutsuta. - Kui
hashCode()on sama, võivad objektid olla kas võrdsed või mitte, seega kutsutakseequals()kontrollimiseks.
Nende reeglite rikkumine võib põhjustada kogumite ebaõiget käitumist, näiteks objekti leidmise võimatust HashSet või HashMap-is.
Näide:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass other = (MyClass) obj;
return this.id == other.id;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}