Ani*_*dia 28 java arrays equals
可能重复:
Java:检查数组的相等性(顺序无关紧要)
我有两个数组:
String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};
Run Code Online (Sandbox Code Playgroud)
我需要检查两者是否包含相同的元素(和相同的长度),而不管元素的顺序如何.
我试过Arrays.equals(a1, a2)但它考虑了元素的顺序.
org.apache.commons.lang.ArrayUtils不提供这个东西.
我知道我可以通过创建自己的方法(检查相同的长度,然后对数组进行排序然后使用Arrays.equals(a1, a2))来实现相同的目标,但是想知道这个东西是否在任何API中提供,或者有更聪明的方法来做同样的事情.
Bla*_*ble 24
如果这些数组包含在继承自Collection的内容中,则可以使用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
Run Code Online (Sandbox Code Playgroud)
sat*_*ngh 23
我认为它可能适合你,排序第一阵列
Arrays.sort(Object[]);
Run Code Online (Sandbox Code Playgroud)
之后你就可以比较了
Arrays.equals(Object[],Object[]);
Run Code Online (Sandbox Code Playgroud)
完整的代码是:
String[] a1 = {"a", "b", "c"};
String[] a2 = {"c", "b", "a"};
Arrays.sort(a2);
boolean result= Arrays.equals(a1, a2);
Run Code Online (Sandbox Code Playgroud)
Aar*_*lla 10
在比较之前将列表转换为集合:
new HashSet( Arrays.asList( a1 )).equals( new HashSet( Arrays.asList( a2 ) ));
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用排序数组,Arrays.sort()但这可能会破坏代码,这取决于数组中元素的顺序.
| 归档时间: |
|
| 查看次数: |
33254 次 |
| 最近记录: |