Middle
Kādi ir noteikumi metodiem equals un hashCode?
sobes.tech AI
Atbilde no AI
- Ja divi objekti ir vienādi pēc
equals(Object)metodes, tad to hash kodi (kas tiek atgriezts arhashCode()) ir jābūt vienādiem. - Ja divi objekti nav vienādi pēc
equals(Object)metodes, to hash kodi var būt gan vienādi, gan atšķirīgi. Labā prakse ir nodrošināt atšķirīgus hash kodus nesaskaņotiem objektiem, lai uzlabotu kolekciju, kas balstītas uz hash funkcijām, veiktspēju. hashCode()metodei jāatgriež vienādi vērtības tajās pašās apstākļos, ja nekāda informācija, kas tiek izmantota hash koda aprēķinā, nav mainījusies.- Simetrija: jebkuriem
aunbobjektiem, jaa.equals(b)irtrue, tadb.equals(a)arī ir jābūttrue. - Reflēksivitāte: jebkuram
anullei līdzīgam objektam,a.equals(a)ir jābūttrue. - Transitivitāte: jebkuriem
a,buncobjektiem, jaa.equals(b)irtrueunb.equals(c)irtrue, tada.equals(c)arī ir jābūttrue. - Saskaņotība: jebkuriem nullei līdzīgiem
aunbobjektiem, vairākia.equals(b)izsaukumi ir jāatgriež konsekventitruevaifalse, jaequals(Object)izmantotā informācija nav mainījusies.
Piemēra realizācija:
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) {
// Objektu identitātes pārbaude
if (this == o) {
return true;
}
// Objekta tipa pārbaude
if (o == null || getClass() != o.getClass()) {
return false;
}
// Tipa pārveidošana
MyClass myClass = (MyClass) o;
// Lauku salīdzināšana
return value == myClass.value &&
Objects.equals(name, myClass.name); // Izmantojam Objects.equals null-iem
}
@Override
public int hashCode() {
// Izmantojam Objects.hash, lai ģenerētu hash kodu no laukiem
return Objects.hash(value, name);
}
// Citas metodes...
}