Pourquoi est-il nécessaire de redéfinir les méthodes hashCode et equals lors de l'ajout d'objets identiques dans un HashSet?
sobes.tech IA
Réponse de l'IA
HashSet en Java utilise une table de hachage pour stocker les éléments. Pour déterminer correctement si deux objets sont identiques et éviter les doublons, HashSet s’appuie sur les méthodes hashCode() et equals().
- La méthode
hashCode()calcule le code de hachage de l’objet, qui détermine dans quelle "corbeille" (bucket) de la table de hachage il sera placé. - La méthode
equals()compare deux objets pour vérifier leur égalité.
Si vous ne surchargez pas ces méthodes dans votre classe, l’implémentation de la classe Object sera utilisée, qui compare les objets par référence (c’est-à-dire que deux objets différents avec les mêmes données seront considérés comme différents).
Par conséquent, pour que HashSet reconnaisse correctement les objets identiques et n’autorise pas les doublons, il est nécessaire de surcharger hashCode() et equals() en tenant compte des champs importants de l’objet.
Exemple :
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2.equals(myClass.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Sans cela, HashSet peut contenir plusieurs objets avec les mêmes données, ce qui viole la logique de l’ensemble.