我们如何比较两个数组列表的值,例如:
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。
中提前致谢
答案 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");
}