2013-09-22 10 views
14

C'è un modo per determinare se un ArrayList contiene un elemento di un ArrayList diverso?Come posso verificare se un ArrayList contiene elementi di un altro ArrayList?

Ti piace questa:

list1.contains(any element of list2) 

è un loop attraverso tutti gli elementi di list2 e controllando gli elementi uno ad uno l'unico modo?

+0

Se 'X contiene un elemento di Y' è il caso d'uso principale per la vostra collezione, si consiglia di considerare l'utilizzo di Set, invece. – maasg

risposta

7

Anche se non è altamente efficiente, questo è terso e impiega l'API:

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

ne dite di provare in questo modo: -

List1.retainAll(List2) 

in questo modo: -

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

Se non si è costretti a utilizzare librerie di terze parti, Apache commons ListUtils è utile per le operazioni di elenco comune.

In questo caso è possibile utilizzare il intersection metodo di

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 
} 

uso org.apache.commons.collections

41

Si consideri il seguente: Java SE 7 documentation: java.util.Collections.disjoint

Il metodo "disgiunto" prende due collezioni (listA e listB per esempio) come parametri e restituisce "tr "se non hanno elementi in comune; quindi, se hanno elementi in comune, restituiranno false.

Un semplice controllo come questo è tutto quello che serve:

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

metodo molto utile 1.7 in poi ...: D – ArifMustafa

Problemi correlati