2013-09-22 4 views
14

Есть ли способ определить, содержит ли ArrayList какой-либо элемент из другого ArrayList?Как проверить, содержит ли ArrayList какой-либо элемент другого ArrayList?

Подобно этому:

list1.contains(any element of list2) 

цикл по всем элементам list2 и проверки элементов по одному единственный способ?

+0

Если «X содержит элемент Y» является основным UseCase для вашей коллекции, вы можете рассмотреть возможность использования вместо Set. – maasg

ответ

7

Хотя не высокоэффективным, это лаконична и использует API:

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

Как о попытке так: -

List1.retainAll(List2) 

как это: -

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

Если вы не ограничены в использовании сторонних библиотек, то Apache commons ListUtils хорош для операций общего списка.

В этом случае вы можете использовать intersection метод

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 
} 

использование org.apache.commons.collections

41

Рассмотрим следующий пример: Java SE 7 documentation: java.util.Collections.disjoint

Метод "не пересекаются" занимает две коллекции (listA и listB) в качестве параметров и возвращает "tr ue ", если у них нет общих элементов; таким образом, если они имеют какие-либо общие элементы, они вернут false.

Простая проверка, как это все, что требуется:

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

очень полезный метод 1.7 и далее ...: D – ArifMustafa

Смежные вопросы