Java 如何比较两个或多个列表(整数)相等?

Java 如何比较两个或多个列表(整数)相等?,java,algorithm,sorting,compare,Java,Algorithm,Sorting,Compare,我需要比较两个或多个集合,如列表“l1、列表l2、列表l3…”,但如何比较它们 在我看来,首先是Collections.sort(list),然后是l1.euqals(l2),等等。。。 但这似乎不是有效的方法,它的成本约为O(n^2),而且没有两个列表,可能是三个或四个或更多 另一种方法是使用足够多的max数组A init Zero,首先用一个非零的数字填充一个[l1.get(i)],然后用零填充一个[l2.get(i)],最后,如果数组A仍然用零填充,则这两个列表相等。它的成本是O(n),但

我需要比较两个或多个集合,如列表“l1、列表l2、列表l3…”,但如何比较它们

在我看来,首先是Collections.sort(list),然后是l1.euqals(l2),等等。。。 但这似乎不是有效的方法,它的成本约为O(n^2),而且没有两个列表,可能是三个或四个或更多

另一种方法是使用足够多的max数组A init Zero,首先用一个非零的数字填充一个[l1.get(i)],然后用零填充一个[l2.get(i)],最后,如果数组A仍然用零填充,则这两个列表相等。它的成本是O(n),但麻烦的不仅仅是两个列表

有没有什么快速有效的方法,只需花费更少的时间? 我希望我能把我的想法表达清楚。希望是

假设您有一个

List<Collection<X>> listOfColls
列清单
需要知道他们是否都是平等的。列表或集合相等的先决条件是它们具有相同数量的元素。所以

public static <X> boolean allequal( List<Collection<X>> listOfColls ){
    if( listOfColls.size() <= 1 ) return true;
    int nel = listOfColls.get(0).size();
    for( int i = 1; i < listOfColls.size(); ++i ){
        if( listOfColls.get(i).size() != nel ) return false;
    }
    for( int i = 1; i < listOfColls.size(); ++i ){
        if( ! listOfColls.get(i).equals( listOfColls.get(0) ) ) return false;
    }
    return true;
}
publicstaticbooleanalallequal(colls列表){

如果Java中的(listOfColls.size()
Set#equals()
没有考虑元素的顺序,那么排序是不必要的。@JordiCastilla这个问题是关于n>2个集合的,这与您发布的链接中的问题不同(比较两个集合).@JordiCastilla,@laune是的,我需要比较像列表而不是集合这样的集合。@xiaocainiao请用谷歌搜索一下,如果你知道如何比较两个集合,你可以使用相同的机制来比较3个或更多个集合……我需要比较像列表而不是集合这样的集合。好的-实际上这应该适用于集合列表-对Li来说也是一样st和Set你写了“比较两个或多个集合”。下定决心!-重点是你是否需要“集合语义”而不是“列表语义”。您的答案似乎很有效,而且比较时间更短。非常感谢!如果集合比较确实需要排序,但列表比较似乎需要排序,我将在我的答案中添加集合与列表比较的不同语义提示。