阵列Equals已忽略令[复制](Arrays Equals Ignoring Order [dup

2019-07-31 02:04发布

可能重复:
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提供或有更多聪明的方式做同样的。

Answer 1:

如果你有这些东西从阵列收集继承,你可以使用collection.containsAll( otherCollection )从Collection接口。 然而,你还需要比较二者的长度来验证一组是不是其他的超集。

(感谢去Aardvarkk和piegames。)

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

注意:这将工作提高到一个点。 这被定义,以检查任何现有元件的至少之一 。 也就是说,如果你有3个a在一个收藏价值和7 a中的其他值,这不一定会导致它给他们打电话不等。

例子:

[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


Answer 2:

我认为它可能为你工作,与排序第一阵列

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


Answer 3:

比较之前转换列表,以集:

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

或者,你可以使用数组排序Arrays.sort()但对可能出现的代码依赖于数组中元素的顺序。



Answer 4:

使用java.util.Set方法equals 。 比较两组具有相同的大小,并且在指定组的所有成员都包含在另一组。



文章来源: Arrays Equals Ignoring Order [duplicate]