比较两个数组的顺序不同

时间:2019-02-15 14:17:31

标签: java arrays groovy katalon-studio

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

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

好吧,我尝试过:

assert collection1.equals(collection2)

但是我知道只有当这些数组中的值以相同顺序放置时,这种方法才有效。

4 个答案:

答案 0 :(得分:3)

我可以想到两种方法:

  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,然后可以使用这种方法:

public static boolean equals(Collection<?> a, Collection<?> b) {
     return a.size() == b.size() && a.containsAll(b);
}

答案 1 :(得分:0)

在数组中,顺序很重要。如果要使用数组而不检查顺序,则应使用集合Sets tutorial

但是,如果您不想使用其他类型,建议您实现自己的函数,以检查每个元素之间是否存在。

我希望这会有所帮助!

答案 2 :(得分:0)

我对Java编程绝对了解,但是一段时间以来,我已经更普遍地想到了这个问题,而且我认为我有一个可行的解决方案,如果您知道所有先验知识,便可以推广。可以包含在数组中。

如果为数组中可能存在的每个字符串分配一个质数,然后将数组中的所有元素相乘,则相乘后的数字将代表唯一的组合,但不代表顺序,也不代表数组中的元素。要关闭循环,您只需要比较该乘法的值即可。如果有更好的答案,请使用它,但我想我会分享这个想法。

答案 3 :(得分:0)

在Groovy中,只需对它们进行排序,然后检查排序后的列表:

FB.login(function (response) {
...
}, {scope: ['manage_pages', 'leads_retrieval']});

或者如果它们不能重复,请使用@Baldwin

建议的Sets