Middle
Millised on reeglid meetoditele equals ja hashCode?
sobes.tech AI
Vastus AI-lt
- Kui kaks objekti on võrdsed
equals(Object)meetodi järgi, siis nende hash-koodid (mida tagastabhashCode()) peavad olema samad. - Kui kaks objekti ei ole võrdsed
equals(Object)meetodi järgi, siis nende hash-koodid võivad olla kas samad või erinevad. Hea tava on tagada erinevad hash-koodid mitte-võrdsetele objektidele, et parandada hash-põhiste kogude jõudlust. hashCode()meetod peaks tagastama samad väärtused samal objektil mitme kutsumise korral, kui kasutatud teave hash-koodi arvutamiseks ei ole muutunud.- Sümmeetrilisus: iga
ajabobjekti puhul, kuia.equals(b)ontrue, siis peab kab.equals(a)olematrue. - Reeglilisus: iga mitte-null
aobjekti puhul,a.equals(a)peab olematrue. - Transitiivsus: iga
a,bjacobjekti puhul, kuia.equals(b)ontruejab.equals(c)ontrue, siis peab kaa.equals(c)olematrue. - Kokkusobivus: iga mitte-null
ajabobjekti puhul, mitmekordseda.equals(b)kutsed peavad järjepidevalt tagastamatruevõifalse, kuiequals(Object)kasutamisel olev teave ei ole muutunud.
Näide rakendamisest:
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) {
// Objektide identiteedi kontroll
if (this == o) {
return true;
}
// Objekti tüübi kontroll
if (o == null || getClass() != o.getClass()) {
return false;
}
// Tüübi konverteerimine
MyClass myClass = (MyClass) o;
// Väli võrdlus
return value == myClass.value &&
Objects.equals(name, myClass.name); // Kasutame Objects.equals null-ide jaoks
}
@Override
public int hashCode() {
// Kasutame Objects.hash, et genereerida hash-kood väli põhjal
return Objects.hash(value, name);
}
// Teised meetodid...
}