如何检查ArrayList <arraylist <string>&gt;包含某个ArrayList <string> </string> </arraylist <string>

时间:2013-01-23 14:09:59

标签: java arraylist equals

标题清楚地说明了我遇到的麻烦,这是我的代码:

// 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?

我希望很清楚我想要实现的目标。

由于

2 个答案:

答案 0 :(得分:1)

您需要遍历整个ArrayList,然后使用ArrayList类的ArrayList方法将StringsRoute的每个元素与equals进行比较。 要实现foreach循环,您可以考虑获得ArrayList的大小。如果我们有ArrayList ar=new ArrayList();,我们可以使用ar.size()来返回大小,然后只需运行for循环ar.size()次来迭代corressponding ArrayList中的每个元素。 希望这能解决你的问题。

答案 1 :(得分:-1)

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/AbstractList.html#equals%28java.lang.Object%29

对于包含在“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