我是编码新手,我决定学习 java、groovy。我正在做一个简单的练习。我有一个两个数组,如果它们相等,我必须比较它们。我从两个数据库中获取值,这些数据库是相同的,但值的顺序不同,但它们是相等的。例如,我有:
ArrayList collection1 = ["test","a"]
ArrayList collection2 = ["a","test"]
我尝试过这个:
assert collection1.equals(collection2)
但我知道这仅当这些数组中的值按相同顺序放置时才有效。
最佳答案
我能想到两种方法:
- 检查它们的大小是否相等
- 用
Arrays.asList()
包裹两个数组 - 检查是否
a
包含b
中的所有元素
public static boolean equals(Object[] a, Object[] b) {
return a.length == b.length && Array.asList(a).containsAll(Arrays.asList(b));
}
另一种方法是一次迭代两个数组,然后检查元素是否相等:
public static boolean equals(Object[] a, Object[] b) {
if(a.length != b.length) return false;
outer: for(Object aObject : a) {
for(Object bObject : b) {
if(a.equals(b)) continue outer;
}
return false;
}
return true;
}
这两种方法都相当快,第一种方法在数组周围引入了一个额外的包装器,但可以忽略不计,因为 Arrays.asList()
只是使用给定的数组作为 View ,并且不进行任何额外的复制。
现在看来您实际上是在比较两个 Collection
s,那么你可以使用这种方法:
public static boolean equals(Collection<?> a, Collection<?> b) {
return a.size() == b.size() && a.containsAll(b);
}
关于java - 比较两个顺序不同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54711228/