21

有没有办法确定一个 ArrayList 是否包含不同 ArrayList 的任何元素?

像这样:

list1.contains(any element of list2)

循环遍历所有元素list2并一一检查元素是唯一的方法吗?

4

6 回答 6

59

考虑以下内容: Java SE 7 文档:java.util.Collections.disjoint

“disjoint”方法将两个集合(例如 listA 和 listB)作为参数,如果它们没有共同的元素,则返回“true”;因此,如果它们有任何共同的元素,它将返回 false。

只需要这样一个简单的检查:

if (!Collections.disjoint(listA, listB))
{
  //List "listA" contains elements included in list "listB"
}
于 2013-11-27T13:51:22.777 回答
8

虽然效率不高,但它很简洁并且使用了 API:

if (!new HashSet<T>(list1).retainAll(list2).isEmpty())
    // at least one element is shared 
于 2013-09-22T12:40:16.493 回答
5
if(!CollectionUtils.intersection(arrayList1, arrayList2).isEmpty()){
      // has common
}
else{
   //no common
}

采用org.apache.commons.collections

于 2013-09-22T12:46:05.453 回答
4

如果您有权访问 Apache Commons,请参阅CollectionUtils.intersection(a,b)

像这样使用:

! CollectionUtils.intersection(list1, list2).isEmpty()

希望这可以帮助。

于 2013-09-22T12:43:23.200 回答
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);
于 2013-09-22T12:39:11.117 回答
1

如果您不受使用第三方库的限制,Apache commons ListUtils非常适合常见的列表操作。

在这种情况下,您可以使用该intersection方法

if(!ListUtils.intersection(list1,list2).isEmpty()) {
    // list1 & list2 have at least one element in common
}
于 2013-09-22T12:45:14.613 回答