2013-09-22 12 views
14

Gibt es eine Möglichkeit festzustellen, ob eine ArrayList ein Element einer anderen ArrayList enthält?Wie kann ich überprüfen, ob eine ArrayList ein Element einer anderen ArrayList enthält?

So:

list1.contains(any element of list2) 

Ist Schleife durch alle Elemente der list2 und Überprüfung der Elemente eines nach dem anderen der einzige Weg?

+0

Wenn ‚X ein Element von Y enthält‘ die Haupt usecase für Ihre Sammlung ist, können Sie einstellen, anstatt mit zu berücksichtigen. – maasg

Antwort

7

Obwohl nicht sehr leistungsfähig, dies kurz und bündig ist und verwendet die API:

if (!new HashSet<T>(list1).retainAll(list2).isEmpty()) 
    // at least one element is shared 
3

Wie wäre wie diese versuchen: -

List1.retainAll(List2) 

wie folgt aus: -

int a[] = {30, 100, 40, 20, 80}; 
int b[] = {100, 40, 120, 30, 230, 10, 80}; 
List<Integer> 1ist1= Arrays.asList(a); 
List<Integer> 1ist2= Arrays.asList(b); 
1ist1.retainsAll(1ist2); 
1

Wenn Sie bei der Verwendung von Drittanbieterbibliotheken nicht eingeschränkt sind, eignet sich Apache commons ListUtils für allgemeine Listenoperationen.

In diesem Fall könnten Sie die intersection Methode verwenden

if(!ListUtils.intersection(list1,list2).isEmpty()) { 
    // list1 & list2 have at least one element in common 
} 
2
if(!CollectionUtils.intersection(arrayList1, arrayList2).isEmpty()){ 
     // has common 
} 
else{ 
    //no common 
} 

Verwendung org.apache.commons.collections

41

Betrachten Sie das folgende: Java SE 7 documentation: java.util.Collections.disjoint

Die "disjunkt" Methode hat zwei Sammlungen (listA und listB zum Beispiel) als Parameter und gibt "tr "wenn sie keine Gemeinsamkeiten haben, Wenn sie also irgendwelche Elemente gemeinsam haben, wird sie falsch zurückgeben.

Ein einfacher Test, wie das ist alles, was man braucht:

if (!Collections.disjoint(listA, listB)) 
{ 
    //List "listA" contains elements included in list "listB" 
} 
+0

sehr nützliche Methode 1.7 weiter ...: D – ArifMustafa

Verwandte Themen