J'ai deux ArrayList
objets avec trois entiers chacun. Je veux trouver un moyen de renvoyer les éléments communs des deux listes. Quelqu'un at-il une idée de la façon dont je peux y parvenir?
95
Utilisez Collection#retainAll()
.
listA.retainAll(listB);
// listA now contains only the elements which are also contained in listB.
Si vous souhaitez éviter que les modifications ne soient affectées listA
, vous devez en créer une nouvelle.
List<Integer> common = new ArrayList<Integer>(listA);
common.retainAll(listB);
// common now contains only the elements which are contained in listA and listB.
Collection#retainAll()
et les commentaires dans les extraits de code, non, ce n'est pas le cas. Les modifications sont reflétées dans la liste sur laquelle vous appelez la méthode.Vous pouvez utiliser des opérations d'intersection définies avec vos
ArrayList
objets.Quelque chose comme ça:
Maintenant,
l3
ne devrait avoir que des éléments communs entrel1
etl2
.la source
l2
. Vous vouliez probablement dire à laList<Integer> l3 = new ArrayList<Integer>(l2);
place.Pourquoi réinventer la roue? Utilisez les collections communes :
la source
retainAll()
des éléments répétés. Il est donc probable que l'un est correct et l'autre incorrect selon la façon dont vous abordez le problème.Utilisation de la
Stream.filter()
méthode de Java 8 en combinaison avecList.contains()
:la source
la source
Sortie [1, 5]
la source
Vous pouvez obtenir les éléments communs entre deux listes en utilisant la méthode "retentionAll". Cette méthode supprimera tous les éléments sans correspondance de la liste à laquelle elle s'applique.
Dans ce cas de la liste, tous les éléments qui ne sont pas dans list1 seront supprimés et seuls resteront ceux qui sont communs entre list et list1.
Production:
REMARQUE: une fois la fonction RetainAll appliquée à la liste, la liste contient un élément commun entre list et list1.
la source
la source
la source
considérer deux listes L1 et L2
En utilisant Java8, nous pouvons facilement le trouver
L1.stream().filter(L2::contains).collect(Collectors.toList())
la source
Au cas où vous voudriez le faire vous-même.
la source
commons
contient les éléments communs. La deuxième boucle for les imprime sur la console. Je ne vois pas où le code compte les éléments communs.Certaines des réponses ci-dessus sont similaires mais pas les mêmes, alors affichez-les comme une nouvelle réponse.
Solution:
1. Utilisez HashSet pour contenir les éléments qui doivent être supprimés
2. Ajoutez tous les éléments de list1 à HashSet
3. itérez list2 et supprimez les éléments d'un HashSet qui sont présents dans list2 ==> qui sont présents à la fois dans list1 et list2
4 . Maintenant, itérez sur HashSet et supprimez les éléments de list1 (puisque nous avons ajouté tous les éléments de list1 à set), enfin, list1 a tous les éléments communs
Note: Nous pouvons ajouter tous les éléments de list2 et dans une 3e itération, nous devrions supprimer des éléments de liste2.
Complexité temporelle: O (n)
Complexité spatiale: O (n)
Code:
production:
la source