检查ArrayList是否包含来自另一个ArrayList(或Collection)的每个元素

时间:2013-01-24 22:05:05

标签: java arraylist comparison contains

我可能在这里找不到简单的单行,但这是我的问题:

如何检查ArrayList是否包含另一个ArrayList中的所有对象?我正在寻找(如果它存在)以下的内容:

//INCORRECT EXAMPLE:
if(one.contains(two))
{
    return true;
}
else
{
    return false;
}

例如:

ArrayList one = {1, 2, 3, 4, 5}

ArrayList two = {1, 2, 3} --> True
ArrayList two = {} --> True
ArrayList two = {1, 2, 3, 4, 5} --> True
ArrayList two = {1, 5, 2} --> True
ArrayList two = {1, 7, 4} --> False
ArrayList two = {0, 1, 3} --> False
ArrayList two = {4, 5, 6} --> False
ArrayList two = {7, 8, 9} --> False

8 个答案:

答案 0 :(得分:71)

containsAll接口中声明了一个名为java.util.Collection的方法。在您的设置中,one.containsAll(two)会给出所需的答案。

答案 1 :(得分:11)

按照List界面:

myList.containsAll(...);

答案 2 :(得分:10)

containsAll(Collection<?> c)界面查看List方法。我认为这正是你要找的。

答案 3 :(得分:5)

您可以使用列表的containsAll方法进行检查。但是,这是线性操作。如果列表很大,您应首先将其转换为HashSet,然后执行containsAll

HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
    ...
}

如果one的长度为N且长度为M,则此解决方案的时间复杂度为O(M+N); “普通”containsAll的复杂程度为O(M*N),可能会更糟糕。

答案 4 :(得分:3)

示例中的代码没有意义,但无论如何这是一个例子。

ArrayList<Integer> one, two;
//initialize
boolean good = true;
for (int i = 0; i < two.size(); i ++) {
    if (!(one.contains(two.get(i))) {
        good = false;
        break;
    }
}

它只是遍历所有two个元素并检查它们是否在one中。

然后布尔值good包含您想要的值。

请参阅ArrayList#contains

编辑:哦,哇,我完全忘了containsAll。哦,如果你真的想要了解它,这是另一种方法。

答案 5 :(得分:2)

这是另一个使用containsAll()的例子,我用它断言JUnit测试中两个数组相等:

List<String> expected = new ArrayList<String>();
expected.add("this");
expected.add("that");
expected.add("another");

List<String> actual = new ArrayListString();
actual.add("another");
actual.add("that");
actual.add("this");

Assert.assertTrue("The lists do not match!", expected.containsAll(actual));

答案 6 :(得分:1)

这也可以使用 Java 中的流来完成

    List<String> employeeList = Arrays.asList("Marc","john");
    List<String> masterEmployeeList = Arrays.asList("Marc", "Stacy", "john");
    System.out.println(employeeList.stream().allMatch(masterEmployeeList::contains));

答案 7 :(得分:-1)

在org.apache.commons.collections.CollectionUtils中声明的

isEqualCollection()方法可以使集合相同或不相同。

如果(CollectionUtils.isEqualCollection(collectionA,collectionB)) { 做... }