Question

J'ai 2 listes chaînées.

J'ai le même objet dans ces deux listes. En même objet, je veux dire l'objet a le même état, mais est référencé par un pointeur d'objet différent.

Je peux appeler .remove(object); de la première liste pour le supprimer, mais si je fais la même chose pour la deuxième liste, il n'est pas supprimé (car la référence de pointeur d'objet est différent)

Y at-il un moyen facile de supprimer des objets avec le même état de différentes listes?

En y repensant, je boucle probablement dans la deuxième liste comparant l'état de ses objets, mais je cherchais un moyen plus propre

Était-ce utile?

La solution

Remplacer la méthode equals pour l'objet. Si elles ont des fonctionnalités d'équivalence similaires, ils doivent être correctement supprimé les deux listes.

Modifier - pour le bien de correctnes:

Vous devez toujours remplacer la méthode hashCode lors de la substitution de la méthode equals. Le défaut de le faire peut ne pas apparaître aucune fonctionnalité étrange dans votre liste, mais une fois que vous essayez d'utiliser le même objet en dire un HashMap, vous pouvez constater que le supprimer ou mettre peut ne pas fonctionner comme vous vouliez.

Autres conseils

Si les objets ont le même état, alors il est probablement correct pour vous de passer outre leurs égaux et méthodes hashCode pour en tenir compte. Si les objets sont les mêmes jusqu'à la méthode equals est concerné, vous pouvez appeler supprimer sur les deux listes.

Si les listes chaînées sont correctement mis en œuvre, le fait que les différents objets sont souligné dans la mémoire ne doit pas empêcher cela de travailler. Selon le liste API , la méthode de suppression:

  

... supprime l'élément avec l'indice le plus bas i tel que (o == null get (i) == null: o.equals (get (i))) (si un tel élément existe) ...

Vous devez remplacer les deux equals() et hashCode() sur vous opposez. Lorsque ceux-ci ne sont pas écrasées le comportement par défaut est de comparer l'identité de l'objet-à-dire la référence. Lorsque vous surchargent equals vous pouvez modifier la comparaison basée sur l'état de l'objet, à savoir l'égalité logiquement. Il est important de se rappeler de passer outre hashCode aussi bien, comme si cela ne se fait pas, il peut conduire à un comportement étrange lorsque vous objet est utilisé dans un HashSet ou Hashtable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top