Ich habe zwei ArrayList
Objekte mit jeweils drei ganzen Zahlen. Ich möchte einen Weg finden, die gemeinsamen Elemente der beiden Listen zurückzugeben. Hat jemand eine Idee, wie ich das erreichen kann?
94
Verwenden Sie Collection#retainAll()
.
listA.retainAll(listB);
// listA now contains only the elements which are also contained in listB.
Wenn Sie vermeiden möchten, dass Änderungen betroffen sind listA
, müssen Sie eine neue erstellen.
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()
und in den Kommentaren in den Codefragmenten beantwortet , nein, das tut es nicht. Änderungen werden in der Liste angezeigt, für die Sie die Methode aufrufen.Sie können festgelegte Schnittoperationen mit Ihren
ArrayList
Objekten verwenden.Etwas wie das:
Nun
l3
sollte nur gemeinsame Elemente zwischenl1
und habenl2
.quelle
l2
. Sie wollten wahrscheinlichList<Integer> l3 = new ArrayList<Integer>(l2);
stattdessen sagen .Warum das Rad neu erfinden? Verwendung Commons Kollektionen :
quelle
retainAll()
bei wiederholten Elementen. Je nachdem, wie Sie sich dem Problem nähern, ist wahrscheinlich einer richtig und einer falsch.Verwendung der Java 8-
Stream.filter()
Methode in Kombination mitList.contains()
:quelle
quelle
Ausgabe [1, 5]
quelle
Sie können die gemeinsamen Elemente zwischen zwei Listen mit der Methode "keepAll" abrufen. Diese Methode entfernt alle nicht übereinstimmenden Elemente aus der Liste, für die sie gilt.
In diesem Fall werden aus der Liste alle Elemente entfernt, die nicht in Liste1 enthalten sind, und es bleiben nur die Elemente übrig, die zwischen Liste und Liste1 gemeinsam sind.
Ausgabe:
HINWEIS: Nachdem keepAll auf die Liste angewendet wurde, enthält die Liste ein gemeinsames Element zwischen list und list1.
quelle
quelle
quelle
Betrachten Sie zwei Listen L1 und L2
Mit Java8 können wir es leicht herausfinden
L1.stream().filter(L2::contains).collect(Collectors.toList())
quelle
Für den Fall, dass Sie es selbst tun möchten ..
quelle
commons
enthält die allgemeinen Elemente. Die zweite for-Schleife druckt sie auf der Konsole. Ich sehe nicht, wo der Code die gemeinsamen Elemente zählt.Einige der obigen Antworten sind ähnlich, aber nicht identisch. Veröffentlichen Sie sie daher als neue Antwort.
Lösung:
1. Verwenden Sie HashSet, um Elemente zu speichern, die entfernt werden müssen.
2. Fügen Sie alle Elemente von list1 zu HashSet hinzu.
3. Iterieren Sie list2 und entfernen Sie Elemente aus einem HashSet, die in list2 ==> vorhanden sind und sowohl in list1 als auch in list2 vorhanden sind.
4 Iterieren Sie nun über HashSet und entfernen Sie Elemente aus Liste1 (da wir alle Elemente von Liste1 hinzugefügt haben, um sie festzulegen). Schließlich hat Liste1 alle gemeinsamen Elemente
Hinweis: Wir können alle Elemente von Liste2 hinzufügen und in einer dritten Iteration sollten wir Elemente aus Liste1 entfernen list2.
Zeitliche Komplexität: O (n)
O (n)
Code:
Ausgabe:
quelle