Sobes.tech
Junior

À 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 avec equals : si deux objets sont égaux selon equals, 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;
    }
}