Junior — Middle
Milyen kölcsönös kapcsolatnak kell lennie az equals() és hashCode() metódusok között Java-ban a kollekciókban való helyes működéshez?
sobes.tech MI
Válasz az MI-től
Java-ban a equals() és hashCode() metódusoknak összhangban kell lenniük a kollekciók, különösen a HashMap és HashSet helyes működése érdekében.
Fő szabályok:
- Ha két objektum egyenlő az
equals()szerint, akkorhashCode()-juknak ugyanazt az értéket kell adnia. - Ha két objektum
hashCode()értéke különbözik, akkor különbözőnek számítanak, és azequals()nem kerül meghívásra. - Ha
hashCode()ugyanaz, az objektumok lehetnek egyenlőek vagy nem, ezért azequals()-t meghívják a megerősítéshez.
Ezeknek a szabályoknak a megsértése helytelen viselkedést eredményezhet a kollekciókban, például nem található meg egy objektum a HashSet-ben vagy a HashMap-ben.
Példa:
@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);
}