À quoi servent les méthodes equals et hashCode en Java?
sobes.tech IA
Réponse de l'IA
Les méthodes equals et hashCode en Java sont utilisées pour comparer correctement des objets et pour travailler avec des collections basées sur des tables de hachage (par exemple, HashMap, HashSet).
-
equals(Object o): Détermine si l'objet actuel est équivalent à un autre objet. Par défaut, compare les références des objets. Redéfinie pour comparer l'état interne des objets. -
hashCode(): Renvoie une valeur entière (code de hachage) de l'objet. Utilisée par les collections pour rechercher rapidement des éléments. Doit être cohérente avecequals: si deux objets sont égaux selonequals, leurs codes de hachage doivent être identiques. La déclaration inverse n'est pas vraie.
Une mauvaise implémentation ou l'absence de redéfinition de ces méthodes peut entraîner un comportement incorrect lors de l'utilisation d'objets dans des collections, comme l'absence d'un objet dans un Set après l'avoir ajouté ou l'impossibilité de trouver un objet dans un HashMap par clé.
Exemple de redéfinition :
public class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true; // Comparaison des références
if (o == null || getClass() != o.getClass()) return false; // Vérification du type et null
MyObject that = (MyObject) o; // Cast
if (id != that.id) return false; // Comparaison des champs
return name != null ? name.equals(that.name) : that.name == null;
}
@Override
public int hashCode() {
int result = id; // Calcul du code de hachage basé sur les champs
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}