Middle
Wat zijn de regels voor de methods equals en hashCode?
sobes.tech AI
Antwoord van AI
- Als twee objecten gelijk zijn volgens de methode
equals(Object), moeten hun hash-codes (teruggegeven door de methodehashCode()) gelijk zijn. - Als twee objecten niet gelijk zijn volgens de methode
equals(Object), kunnen hun hash-codes gelijk of verschillend zijn. Het is een goede praktijk om verschillende hash-codes te garanderen voor niet-gelijke objecten om de prestaties van hash-gebaseerde collecties te verbeteren. - De methode
hashCode()moet voor hetzelfde object bij meerdere aanroepen dezelfde waarden teruggeven, zolang de informatie die wordt gebruikt voor het berekenen van de hash niet is gewijzigd. - Symmetrie: voor elk object
aenb, alsa.equals(b)trueis, dan moetb.equals(a)ooktruezijn. - Reflexiviteit: voor elk niet-null object
a, moeta.equals(a)truezijn. - Transitiviteit: voor elk object
a,benc, alsa.equals(b)trueis enb.equals(c)trueis, dan moeta.equals(c)ooktruezijn. - Consistentie: voor elk niet-null object
aenb, moeten meerdere aanroepen vana.equals(b)consequenttrueoffalseteruggeven, zolang de informatie die wordt gebruikt in deequals(Object)-vergelijkingen niet is gewijzigd.
Voorbeeldimplementatie:
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) {
// Identiteitscontrole
if (this == o) {
return true;
}
// Typecontrole
if (o == null || getClass() != o.getClass()) {
return false;
}
// Casting
MyClass myClass = (MyClass) o;
// Vergelijking op velden
return value == myClass.value &&
Objects.equals(name, myClass.name); // Gebruik van Objects.equals voor null-behandeling
}
@Override
public int hashCode() {
// Gebruik van Objects.hash
return Objects.hash(value, name);
}
// Andere methoden...
}