【发布时间】:2013-01-23 14:09:58
【问题描述】:
标题很好地说明了我遇到的麻烦,这是我的代码:
// 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 来确定两个 ArrayList 是否相似,但我有一个包含许多其他 ArrayList 的 ArrayList。
如何检查父 ArrayList 是否包含与我正在创建的新 ArrayList 相同的 ArrayList?
我希望很清楚我想要达到的目标。
谢谢
【问题讨论】:
-
请不要以大写开头的变量名...
StringsRoute看起来像一个类而不是一个变量! -
你知道
stringsRoute总是包含2个元素吗? -
感谢您指出 jlordo,我稍后需要更改它,但现在我只是在为主要问题找到一个巧妙的解决方案。再次感谢。
-
@Ciwan:嗯,现在的方式(总是 2 个字符串)我会引入一个类
StringTuple并为此提供一个equals方法并使用List<StringTuple>而不是 @987654327 @. -
@Ciwan...如果您的arraylist r 不包含arrayList stringList,您是否知道您将进入if 循环?如果主arraylist r 中存在stringList arraylist,您的if 循环将始终失败.