我有一个列表列表,我想添加一个列表,没有重复。在其他方面,我想检查该列表是否已包含在主列表中。我写过类似的东西
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);
}
}
}
的内容时,我同时获得Main
和temp
。我该如何解决这个问题?
答案 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
是一种检查此集合是否包含给定集合的所有元素的方法。在这种情况下:
List<String>
; "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()
的方法。要检查主列表是否包含某个对象(另一个列表),只需调用此函数将其作为参数传递。