Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较ArrayList的值_Java - Fatal编程技术网

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");
}