可能重复:
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提供或有更多聪明的方式做同样的。
如果你有这些东西从阵列收集继承,你可以使用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
我认为它可能为你工作,与排序第一阵列
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);
比较之前转换列表,以集:
new HashSet( Arrays.asList( a1 )).equals( new HashSet( Arrays.asList( a2 ) ));
或者,你可以使用数组排序Arrays.sort()
但对可能出现的代码依赖于数组中元素的顺序。
使用java.util.Set
方法equals
。 比较两组具有相同的大小,并且在指定组的所有成员都包含在另一组。