检查列表是否包含另一个列表中的每个元素

Evo*_*lor 46 java comparison contains arraylist

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

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

//INCORRECT EXAMPLE:
if(one.contains(two))
{
    return true;
}
else
{
    return false;
}
Run Code Online (Sandbox Code Playgroud)

例如:

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
Run Code Online (Sandbox Code Playgroud)

C-O*_*tto 80

containsAlljava.util.Collection接口中有一个声明的方法.在您的设置中one.containsAll(two)给出所需的答案.


spl*_*bob 11

按List接口:

myList.containsAll(...);
Run Code Online (Sandbox Code Playgroud)


Dam*_*ski 10

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


小智 6

这是我在用来声明两个数组在JUnit测试中相等时使用containsAll()的另一个示例:

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));
Run Code Online (Sandbox Code Playgroud)


Doo*_*nob 5

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是循环遍历所有 的two元素并检查它们是否在one

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

请参阅ArrayList#contains

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

  • 一旦它变得“错误”,你就应该“打破”。无需继续检查其余部分。 (3认同)
  • 或者(而不是中断)你可以这样做: for (int i = 0; i &lt;two.size() &amp;&amp; good; i ++) (3认同)

das*_*ght 5

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

HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果长度one为2 N和长度为2 M,则该解决方案具有时间复杂度O(M+N); "平原" containsAll具有复杂性O(M*N),可能会更加严重.