我有两个Answer型的ArrayList(brew 课程).

我想比较一下这两份 list ,看看它们是否包含相同的内容,但顺序并不重要.

示例:

//These should be equal.
ArrayList<String> listA = {"a", "b", "c"}
ArrayList<String> listB = {"b", "c", "a"}

List.equals表示,如果两个列表包含相同的元素大小、内容和顺序,则它们是相等的.我也想要同样的东西,但顺序不重要.

有没有简单的方法可以做到这一点?或者我需要执行嵌套for循环,并手动判断两个列表的每个索引?

注意:我不能将它们从ArrayList改为另一种类型的列表,它们需要保持不变.

推荐答案

您可以使用Collections.sort()对两个列表进行排序,然后使用equals方法.稍好一点的解决方案是,在排序之前首先判断它们是否相同长度,如果不相等,则它们不相等,然后排序,然后使用EQUALS.例如,如果您有两个字符串列表,则如下所示:

public  boolean equalLists(List<String> one, List<String> two){     
    if (one == null && two == null){
        return true;
    }

    if((one == null && two != null) 
      || one != null && two == null
      || one.size() != two.size()){
        return false;
    }

    //to avoid messing the order of the lists we will use a copy
    //as noted in comments by A. R. S.
    one = new ArrayList<String>(one); 
    two = new ArrayList<String>(two);   

    Collections.sort(one);
    Collections.sort(two);      
    return one.equals(two);
}

Java相关问答推荐

如何用Java表示C++类以通过FFI使用?

是否可以从@ TrustMapping中删除特定方法的基路径?

Selenium Java:无法访问IFRAME内部的元素

将linkedHashMap扩展到Java中的POJO类

Cucumber TestNG Assert失败,出现java. lang. Numbercycle异常

取消按钮,但没有任何操作方法引发和异常

是否保证在事务性块的末尾标记违反约束?

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

如何在ApachePOI中将图像添加到工作表的页眉?

在Oracle JDBC连接中,连接失效和身份验证失效是什么意思?

如何在Jooq中获取临时表列引用?

错误:不兼容的类型:Double不能转换为Float

A.ForEach与For(类型a:集合)

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

在ECLIPSE上的M1 Pro上运行JavaFX的问题

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

java21预览未命名的符号用于try-with-resources

JavaFX中ListView中的问题