Comparaison d'objets dans ArrayList : comment contain() détermine l'égalité des objets
Lors de l'ajout d'un objet à une ArrayList, il est souvent supposé que le contient () évaluera les objets en fonction uniquement de leurs valeurs de champ. Cependant, le processus réel est plus nuancé que cela.
En Java, l'interface List, implémentée par ArrayList, définit la signature de la méthode contain(). Selon la documentation, la méthode "renvoie vrai si et seulement si cette liste contient l'élément spécifié". Mais comment la liste détermine-t-elle si deux objets sont identiques ?
Le rôle de Equals()
La réponse réside dans la méthode Equals(), qui est définie dans la classe Objet. Cette méthode est chargée de comparer deux objets et de déterminer s’ils représentent la même valeur. Lorsque la méthode contain() est appelée, elle appelle en interne la méthode equals() pour déterminer si l'objet spécifié correspond à l'un des objets de la liste.
Equals() personnalisé pour les objets personnalisés
Dans votre exemple spécifique, vous définissez une méthode equals() personnalisée dans la classe Thing. Ceci est nécessaire car par défaut, la méthode equals() fournie par Object compare les références d'objet, pas les valeurs de champ. Votre implémentation compare correctement le champ de valeur pour déterminer si les deux objets Thing sont égaux.
En supposant que la classe Thing soit implémentée comme indiqué, la méthode contain() retournera en effet true lors de la recherche d'un objet identique. à celui précédemment ajouté à la liste du panier. En effet, la méthode equals() renvoie true lorsque les champs de valeur des deux objets correspondent.
Conclusion
En résumé, la méthode contain() d'ArrayList utilise la méthode equals() pour déterminer si deux objets sont égaux. Pour les classes d'objets personnalisées, vous devrez peut-être remplacer la méthode equals() pour fournir votre propre implémentation basée sur les propriétés spécifiques qui définissent l'égalité pour vos objets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!