无法将字符串的ArrayList与String数组进行比较

时间:2012-09-11 18:22:44

标签: java arraylist

首先我创建了字符串的ArrayList:

List<List<String>> array1 = new ArrayList<List<String>>();

然后用数据填充它并进行打印:

[John, Smith, 120]
[Albert, Einstein, 170]

现在我想在列表中循环并与说String[] array2 = {"Albert", "Einstein", "170"}进行比较,到目前为止我已尝试过:

if (array1.get(i).equals(array2)) { blah }

然而这不起作用,我基本上想要遍历arraylist并找到我的array2是否得到匹配。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:8)

简单的列表不等于数组。最简单的解决方法是首先将数组包装在列表中:

if (array1.get(i).equals(Arrays.asList(array2))

然后使用equals实现,它只对每个项执行顺序相等检查。

如果您只是想找到第一个匹配条目,那么根据路易斯的回答使用indexOf也会有效。

我还强烈建议您在变量array1不是数组时调用它。

最后,如果您使用List<String>作为包装器以避免必须创建具有(例如)名称和年龄的真实数据结构,则不要:创建一个Person课程,所以你最终得到:

List<Person> people = new ArrayList<Person>();
Person testPerson = new Person("Albert", "Einstein", 170);

...适当地实现平等和散列,你会很高兴。您的代码 更易于阅读和维护。

答案 1 :(得分:2)

return listOfListsOfStrings.indexOf(Arrays.asList(arrayOfStrings));

会查明列表中是否存在该阵列的匹配项。如果第i个列表与数组匹配,则返回i;如果未找到匹配,则返回-1。您甚至不需要for循环。

答案 2 :(得分:1)

根据您给出的示例,两者都是列表。因此,尝试使用list1.containsAll(list2),即conatinsAll方法。希望它有所帮助

这里还有一个例子Have I found a bug in java.util.ArrayList.containsAll?

相关问题