Middle
Quelles sont les règles pour les méthodes equals et hashCode?
sobes.tech IA
Réponse de l'IA
- Si deux objets sont égaux selon la méthode
equals(Object), leurs codes de hachage (renvoyés par la méthodehashCode()) doivent être identiques. - Si deux objets ne sont pas égaux selon la méthode
equals(Object), leurs codes de hachage peuvent être identiques ou différents. Il est conseillé d’assurer des codes de hachage différents pour des objets non égaux afin d’améliorer la performance des collections basées sur le hachage. - La méthode
hashCode()doit retourner des valeurs identiques pour le même objet lors de plusieurs appels, tant que les informations utilisées pour calculer le code de hachage n’ont pas changé. - Symétrie : pour tout objet
aetb, sia.equals(b)esttrue, alorsb.equals(a)doit aussi êtretrue. - Réflexivité : pour tout objet non nul
a,a.equals(a)doit êtretrue. - Transitivité : pour tout objet
a,betc, sia.equals(b)esttrueetb.equals(c)esttrue, alorsa.equals(c)doit aussi êtretrue. - Cohérence : pour tout objet non nul
aetb, plusieurs appels àa.equals(b)doivent retourner de façon cohérentetrueoufalse, tant que les informations utilisées dans les comparaisonsequals(Object)n’ont pas changé.
Exemple d’implémentation :
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) {
// Vérification de l’identité des objets
if (this == o) {
return true;
}
// Vérification du type de l’objet
if (o == null || getClass() != o.getClass()) {
return false;
}
// Cast en le type approprié
MyClass myClass = (MyClass) o;
// Comparaison par champs
return value == myClass.value &&
Objects.equals(name, myClass.name); // Utilisation de Objects.equals pour gérer null
}
@Override
public int hashCode() {
// Utilisation de Objects.hash pour générer le code de hachage basé sur les champs
return Objects.hash(value, name);
}
// Autres méthodes...
}