检查ArrayList是否包含另一个ArrayList作为元素

时间:2016-09-28 18:08:22

标签: java arraylist

我有一个列表列表,我想添加一个列表,没有重复。在其他方面,我想检查该列表是否已包含在主列表中。我写过类似的东西

auto numberToWord = [](int x) -> string {
    string outputChoice;

    if (x == 0) { outputChoice = "Rock"; }
    else if (x == 1) { outputChoice = "Paper"; }
    else if (x == 2) { outputChoice = "Scissors"; }

    return outputChoice;
};

当我打印import java.util.ArrayList; public class Test{ public static void main(String [] args) { ArrayList<ArrayList<String>> Main = new ArrayList<>(); ArrayList<String> temp = new ArrayList<>(); temp.add("One"); temp.add("Two"); temp.add("Three"); Main.add(temp);// add this arraylist to the main array list ArrayList<String> temp1 = new ArrayList<>(); temp1.add("One"); temp1.add("Two"); temp1.add("Three"); if(!Main.containsAll(temp1)) // check if temp1 is already in Main { Main.add(temp1); } } } 的内容时,我同时获得Maintemp。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您可以使用List#contains()方法,因为contains会检查ArrayList的实例是否与提供的ArrayList相同,temp.equals(temp1) }}返回true,因为equals的方法AbstractList会比较他们的内容,而这里ArrayList的内容是相等的。

if(!Main.contains(temp1)) // check if temp1 is already in Main
{
    Main.add(temp1);
}

答案 1 :(得分:1)

由于您希望避免重复列表(并且不检查内部列表的元素),只需使用Main.contains而不是Main.containsAll

这将检查Main列表是否已包含包含您要添加的元素的列表。

答案 2 :(得分:1)

这里的问题是你对使用containsAll和列表清单感到困惑。

containsAll是一种检查此集合是否包含给定集合的所有元素的方法。在这种情况下:

  • 此集合包含1个元素,即List<String>;
  • 指定的集合包含3个元素,即"One"Two""Three"

显然,此集合只包含List<String>["First, "Two", "Three"]),包含3个元素;它只包含这三个元素的列表。

所以你真正想要的不是containsAll,而是contains,即你要检查你的列表是否包含另一个列表(而不是它的元素)。

以下作品:

if (!Main.contains(temp1)) {
   Main.add(temp1);
}

将导致Main成为[[One, Two, Three]],只添加一次。

方面的问题是:它为什么有效?现在好了,问题是:我的List<List<String>> [[One, Two, Three]]是否包含此List<String>[One, Two, Three]?由于两个列表具有相同的大小并且它们的所有元素相同时相等,所以它确实包含它。

答案 3 :(得分:0)

如果是关于ArrayList<Integer>,你会怎么做?有一种名为contains()的方法。要检查主列表是否包含某个对象(另一个列表),只需调用此函数将其作为参数传递。