java - 比较两个顺序不同的数组

标签 java arrays groovy katalon-studio

我是编码新手,我决定学习 java、groovy。我正在做一个简单的练习。我有一个两个数组,如果它们相等,我必须比较它们。我从两个数据库中获取值,这些数据库是相同的,但值的顺序不同,但它们是相等的。例如,我有:

ArrayList collection1 = ["test","a"]
ArrayList collection2 = ["a","test"]

我尝试过这个:

assert collection1.equals(collection2)

但我知道这仅当这些数组中的值按相同顺序放置时才有效。

最佳答案

我能想到两种方法:

  1. 检查它们的大小是否相等
  2. Arrays.asList() 包裹两个数组
  3. 检查是否 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/

相关文章:

java - java中InheritableThreadlocal值自动改变

java - 如何从返回android应用程序中的对象的android应用程序使用asmx web服务?

java - 请求参数绑定(bind)和类型转换在spring-mvc中是如何工作的?

php - 如何删除数组中的重复项

groovy - 如何使用groovy对列表列表进行分组

grails - Grails对象不是声明类的实例

java - 编译器找不到我的 'getters'

arrays - VBA数组故障错误9脚本超出范围

java - 从另一个字符串数组中过滤字符串数组

json - Grails呈现JSON