Middle
Koja su pravila za metode equals i hashCode?
sobes.tech АИ
Одговор од АИ
- Ako su dva objekta jednaka prema metodi
equals(Object), njihovi hash kodovi (koji se vraćaju metodomhashCode()) moraju biti isti. - Ako dva objekta nisu jednaka prema metodi
equals(Object), njihovi hash kodovi mogu biti isti ili različiti. Dobra praksa je osigurati različite hash kodove za nejednake objekte radi bolje performanse kolekcija zasnovanih na hash-u. - Metoda
hashCode()treba da vraća iste vrednosti za isti objekat pri višestrukim pozivima, pod uslovom da se informacije koje se koriste za izračunavanje hash-a nisu promenile. - Simetrija: za bilo koja
aib, ako jea.equals(b)true, ondab.equals(a)takođe mora bititrue. - Refleksivnost: za bilo koji nenull
a,a.equals(a)mora bititrue. - Transitivnost: za bilo koja
a,bic, ako jea.equals(b)trueib.equals(c)true, ondaa.equals(c)takođe mora bititrue. - Doslednost: za bilo koja nenull
aib, višestruki pozivia.equals(b)treba da vraćaju konzistentnotrueilifalse, pod uslovom da se informacije koje se koriste uequals(Object)nisu promenile.
Primer implementacije:
public class MyClass {
private int value;
private String name;
public MyClass(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Provera identiteta objekata
if (this == o) {
return true;
}
// Provera tipa objekta
if (o == null || getClass() != o.getClass()) {
return false;
}
// Kastovanje
MyClass myClass = (MyClass) o;
// Poređenje po poljima
return value == myClass.value &&
Objects.equals(name, myClass.name); // Korišćenje Objects.equals za null
}
@Override
public int hashCode() {
// Korišćenje Objects.hash
return Objects.hash(value, name);
}
// Ostale metode...
}