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

2022-08-31 07:16:42

我有两个类型(自制类)。ArrayListAnswer

我想比较这两个列表,看看它们是否包含相同的内容,但没有顺序问题。

例:

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

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

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

注意:我无法将它们从其他类型的列表更改为另一种类型的列表,它们需要保留该列表。ArrayList


答案 1

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

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

答案 2

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

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

推荐