Java 如何比较ArrayList的值
我们如何比较两个数组列表的值,例如:Java 如何比较ArrayList的值,java,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
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中
提前感谢列表界面包含此函数boolean containsall collection c,它似乎可以执行您想要的操作。 编辑:如果a包含的元素多于b,containsAll仍将返回true,因此如果要测试绝对相等性,则需要进行大小比较
编辑2:假设a和b包含唯一的条目。如果存在重复项,如@Robin和@Matti所提到的,则根据OPs对平等性的定义,情况会复杂得多。受上述答案的启发,这将更好地解决问题:
if ( a.containsAll(b) && b.containsAll(a) && (a.size() == b.size() ) )
即使列表中包含重复项,这也应该是有效的
编辑:根据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");
}
它就在API中。我不明白为什么人们不使用这个资源。你能有重复的值吗?如果不是,那么每个值的计数也必须匹配吗?@Matti-如果我们开始讨论重复项,就会变得复杂得多。那么,我们需要一个更好的平等定义。@Kal:他的平等定义正是我想在这里找到的。来吧@Mohammed,至少对平等的整个定义留下一个评论是很好的。事实上,这没有帮助,因为它没有考虑到每个定义的重复次数。它并不确认平等的这一定义。若要测试这种形式的相等性(顺序无关紧要),则必须手动解析这两个列表并跟踪所有重复项。整个列表的大小是没有意义的。我的评论是基于这样一个假设,即重复项是可以接受的,因为它使用的是ArrayList。OP没有定义这一点,所以我将撤回我的否决票。应编辑此答案,以包含列表实际上是一个集合的假设。如果OP想要测试a的所有值是否都在b中,b的所有值是否都在a中,这也是一个好主意。但是,它不处理列表a包含5个元素而列表b包含6个元素实例的情况。在这种情况下,列表相等,但此方法将返回false。此时,我们正在猜测OP的真正要求。调用不必要的containsAll,而是:if a.size==b.size&&a.containsAllb
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");
}