如何比较Arraylists的值

时间:2011-06-30 19:28:02

标签: java

我们如何比较两个数组列表的值,例如:

    ArrayList a = new ArrayList<String>();
    a.add("1");
    a.add("2");
    a.add("3");

    ArrayList b = new ArrayList<String>();
    b.add("3");
    b.add("2");
    b.add("1");
    System.out.println(areEqual(a, b));

应该打印为true,因为a的所有值都在b。

提前致谢

3 个答案:

答案 0 :(得分:10)

列表界面包含此功能boolean containsAll(Collection<?> c),它似乎可以执行您想要的操作。 http://download.oracle.com/javase/6/docs/api/java/util/List.html#containsAll(java.util.Collection)

答案 1 :(得分:8)

if ( a.containsAll(b) && (a.size() == b.size() ) )

编辑:如果a包含的元素多于b,则containsAll仍将返回true,因此如果要测试绝对相等,则需要进行大小比较。

编辑#2:这假定a和b包含唯一条目。如果有像@Robin和@Matti所提到的重复,那么根据OP的相等定义,它会复杂得多。

答案 2 :(得分:2)

受上述答案的启发,这可以更好地解决问题:

if ( a.containsAll(b) && b.containsAll(a) && (a.size() == b.size() ) )

即使列表包含重复项,这也应该是一个有效的equals()案例。

编辑:通过Jon7的建议,这是一个改进的版本,检查相同的独特元素:

Set set1 = new HashSet();
set1.addAll(a)
Set set2 = new HashSet();
set2.addAll(b);
if ( set1.containsAll(set2) && set2.containsAll(set1) && (set1.size() == set2.size() )) {
    System.out.println("Lists are equal");
}