Java ArrayList - 如何判断两个列表是否相等,顺序无关紧要?

新手上路,请多包涵

我有两个 ArrayList 类型的 Answer (自制类)。

我想比较这两个列表,看看它们是否包含相同的内容,但不考虑顺序。

例子:

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

List.equals 指出如果两个列表包含相同的大小、内容和元素顺序,则它们是相等的。我想要同样的东西,但顺序无关紧要。

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

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

原文由 iaacp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 855
2 个回答

您可以使用 Collections.sort() 对两个列表进行排序,然后使用 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);
}

原文由 Jacob Schoen 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 任何 列表,最简单的方法可能是:

 listA.containsAll(listB) && listB.containsAll(listA)

原文由 user381105 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏