Sobes.tech
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 nende hashCode() meetodid tagastama sama väärtuse.
  • Kui hashCode() kahe objekti puhul erineb, peetakse neid erinevateks ja equals() ei kutsuta.
  • Kui hashCode() on sama, võivad objektid olla kas võrdsed või mitte, seega kutsutakse equals() 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);
}