数组等于忽略顺序

2022-09-01 03:40:18

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

我有两个数组:

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

我需要检查两者是否包含相同的元素(并且长度相同),而不管元素的顺序如何。

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

我知道我可以通过创建自己的方法(检查相同的长度,然后对数组进行排序,然后使用)来实现相同的目标,但想知道这个东西是否在任何API中提供,或者有更智能的方式来做同样的事情。Arrays.equals(a1, a2)


答案 1

如果这些数组位于从集合继承的内容中,则可以从“集合”界面使用。但是,您还需要比较两者的长度,以验证一个集合不是另一个集合的超集。collection.containsAll( otherCollection )

(感谢Aardvarkk和piegames。

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

注意:这将工作到一定程度。这被定义为检查任何元素中的至少一个存在。也就是说,如果一个集合中有 3 个值,另一个集合中有 7 个值,则一定会导致它调用它们不相等。aa

例子:

[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

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