标题清楚地说明了我遇到的麻烦,这是我的代码:
// fields required for traversal
private Queue<ArrayList<String>> q;
private ArrayList<ArrayList<String>> r;
Set<String> stringList = getMeStrings();
for(String s : stringList)
{
ArrayList<String> stringsRoute = new ArrayList<String>();
stringsRoute.add(getSomeString());
stringsRoute.add(s);
if(!r.contains(stringList))
{
if(!q.contains(stringList))
{
q.add(stringList);
}
r.add(stringList);
}
}
For循环中的我的If语句总是失败,我认为原因是因为我正在创建一个新的ArrayList对象(不同的引用)而我的If语句没有检查是否有每个ArrayLists的内容[r]包含相同顺序的相同元素..等等
我知道需要使用.equals来查明两个ArrayLists是否相似,但我有一个包含许多其他ArrayLists的ArrayList。
如何检查父ArrayList是否包含一个等于我正在创建的新ArrayList的ArrayList?
我希望很清楚我想要实现的目标。
由于
答案 0 :(得分:1)
您需要遍历整个ArrayList
,然后使用ArrayList类的ArrayList
方法将StringsRoute
的每个元素与equals
进行比较。
要实现foreach循环,您可以考虑获得ArrayList
的大小。如果我们有ArrayList ar=new ArrayList();
,我们可以使用ar.size()
来返回大小,然后只需运行for循环ar.size()
次来迭代corressponding ArrayList
中的每个元素。
希望这能解决你的问题。
答案 1 :(得分:-1)
对于包含在“r”中的“StringsRoute”,“r”中的列表必须具有相同顺序的相同元素。
Arrays.asList("1","2") .equals(Arrays.asList("2","1")) == false
Arrays.asList("1","2") .equals(Arrays.asList("1","2")) == true
Arrays.asList(Arrays.asList("1","2")).contains(Arrays.asList("1","2")) == true
Arrays.asList(Arrays.asList("1","2")).contains(Arrays.asList("2","1")) == false
可能您想使用集合列表以避免与订单挣扎。
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/AbstractSet.html#equals%28java.lang.Object%29
List< Set< String > > r;
自:
new HashSet(Arrays.asList("1","2")).equals(new HashSet(Arrays.asList("2","1"))) == true