Comparer les deux listes
Je veux comparer deux listes. Depuis que nous avons le code de l'interface à l'aide de List
, qui n'hérite pas de la equals
à partir de la classe de l'Objet. Comment puis-je faire cela?
Chaque mise en œuvre de la Liste n'est, directement ou indirectement, hérite de l'Objet. Sonne comme vous avez obtenu quelques malentendus de OO ici.
OriginalL'auteur javaguy | 2010-05-22
Vous devez vous connecter pour publier un commentaire.
Même si le
List
interface ne contient pas deequals
méthode, la liste des classes peut (et ne doit) toujours mettre en œuvre lesequals
méthode.De la Les docs de l'API sur
AbstractList
(hérité, par exemple, enArrayList
,LinkedList
,Vector
):La même chose s'applique à la
toString
,hashCode
méthode et ainsi de suite.@Pascal mentionne dans les commentaires, la Liste de l'interface mentionne le
equals
méthode et états suivants dans la documentation:OriginalL'auteur
Vous pouvez toujours utiliser
equals
. Tous les objets en œuvre, et de vos listes sont toujours objets et remplacerequals
que vous en avez besoin.OriginalL'auteur tangens
C'est l'histoire d'habitude: vous avez à considérer "shallow est égal à" et "de profondeur égale".
Le comportement par défaut que vous sortez de java.lang.L'objet est "superficielle est égal". Il va vérifier pour voir si list1 et list2 sont les mêmes références:
Si vous voulez "de profondeur égale", instancier tout ce qui s'étend AbstractList, comme ArrayList.
List
interface se doit de vérifier l'égalité élément par élément. Donc, même siObject.equals()
ne "shallow égaux",List.equals()
(et tout conforme mise en œuvre) n' "de profondeur égale", et il n'est pas nécessaire d'écrire votre propre méthode.D'accord sur la Liste, mais si l'élément ne modifie pas égaux vous n'obtenez pas de "profondeur égale". Ce n'est pas formulée très clairement, mais je crois que c'est la vérité.
Objet.equals() est un espace réservé pour profondeur d'égal à égal; il n'est pas destiné à être utilisé pour une faible égal à égal. Le contrat standard exige que tous les objets (et pas seulement de la Liste) met en œuvre equals() pour effectuer de la profondeur de l'égalité. C'est ce que la méthode equals() est pour. '==' est peu profonde de comparaison.
Désolé, le défaut de mise en œuvre en java.lang.L'objet est peu profonde égal à égal. C'est ce que vous obtenez si vous ne faites rien. Cette réponse est de QUATRE ANS. Vous n'ajoutent rien à ce commentaire inutile. Aller faire autre chose, comme répondre à une question, pour booster votre réputation.
L'exemple ci-dessus a été d'essayer d'instancier une interface. Changé le faire réellement de la compilation.
OriginalL'auteur duffymo