使用 equals() 比较两个数组并忽略元素的顺序[重复]

问题描述 投票:0回答:4

可能重复:
Java:检查数组的相等性(顺序无关紧要)

我有两个数组:

String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};

我需要检查两个数组是否包含相同的元素(并且长度相同)无论元素的顺序如何。

我尝试了

Arrays.equals(a1, a2)
,但它考虑了元素的顺序。
org.apache.commons.lang.ArrayUtils
不提供这个东西。

我知道,我可以通过创建自己的方法来实现相同的目的(检查相同的长度,然后对两个数组进行排序,然后使用

Arrays.equals(a1, a2)
),但想知道这个东西是否在任何API中提供或者有更聪明的方法做同样的事情。

java arrays compare equals
4个回答
36
投票

如果您在继承自 Collection 的对象中拥有这些数组,则只需使用 Collection 接口中的

collection.containsAll( otherCollection )
即可。 但是,您还需要比较两者的长度,以验证一组不是另一组的超集。

(感谢 Aardvarkk 和 piegames。)

http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html#containsAll(java.util.Collection)

注意:这在一定程度上会起作用。 定义它是为了检查任何现有元素中的“至少一个”。 也就是说,如果一个集合中有 3 个 a 值,而另一个集合中有 7 个

a
值,那么
not
一定会导致它称它们不相等。 示例:

[a, b, c] == [c, a, b] // Works -- Mixed order [a, b, c, d, d] == [a, b, d, c, d] // Works -- Mixed order with repeats [a, b, c, d, d] == [a, b, b, c, d] // FAILS -- Different repeats [a, b, c, d, d] != [a, b, c, d] // Works -- Length differs with repeats [a, b, c, d] != [a, b, c] // Works -- Length differs [a, b, d] != [a, b, c] // Works -- Disjoint sets



29
投票
对第一个数组进行排序

Arrays.sort(Object[]);

之后你可以与
进行比较

Arrays.equals(Object[],Object[]);

完整代码是:

String[] a1 = {"a", "b", "c"}; String[] a2 = {"c", "b", "a"}; Arrays.sort(a2); boolean result= Arrays.equals(a1, a2);



15
投票

new HashSet( Arrays.asList( a1 )).equals( new HashSet( Arrays.asList( a2 ) ));

或者,您可以使用 
Arrays.sort()

对数组进行排序,但这可能会破坏代码,这取决于数组中元素的顺序。

    


3
投票
java.util.Set

方法

equals
。比较两个具有相同大小的集合,并且指定集合的每个成员都包含在其他集合中。
    

© www.soinside.com 2019 - 2024. All rights reserved.