java,判断两个Integer数组是否相等,有没有新奇高效的方法?

图片说明
如图,判断oldVersion Integer数组和temp Integer数组里面的元素是否相等,我只有一个做法那就是循环去判断,但是我觉得吧肯定还有一些别的做法,难道大家都是用这种做法去判断两个对象数组是否相等的吗?
希望大家不吝赐教!

按照CRC的做法来也是可以的。

直接循环比较,或者元素一个个拼接成一个大数,再比较。不过也没啥区别

既然getVersion这个方法返回一个数组,那应该可以把getVersion的代码copy到这个方法里面,然后直接在copy过来的代码中直接判断是否相等了。

这样速度会快,但代码会变得相对肮脏。
如何取舍就看自己的需求了。

如何取舍就看自己的需求了,应该可以的,觉得可以的三分

用异或,速度快,不过数组长度很小的情况下体现不出来

Array.equals(oldVersion,temp) 用来判断两个数组是否相等

在没有排序、hash的情况下,线性比较是唯一的做法。
如果可以用jni的话,可以用c++或者汇编来优化。在Intel 4代以后的处理器上,使用avx512指令,可以一次性比较16个数字,效率是惊人的。

Arrays.equals(oldVersion, temp)

把数据转成list集合,然后使用removAll的方法,删除后的集合为空则相等,不为空则不相等。注意这里转成list集合不能使用Arrays.asList(),因为这个方法底层还是数组形式,不能通过集合做运算。我提供一个谷歌的guava工具包:

@Test
    public void test08() {
            Integer[] a = {1,2,3,4};
            Integer[] b = {1,2,3};
            //Lists.newArrayList()  guava中的工具类
            List<Integer> aList = Lists.newArrayList(a);
            List<Integer> bList = Lists.newArrayList(b);
            System.out.println(aList);  // [1, 2, 3, 4]
            aList.removeAll(bList);
            System.out.println(aList);  // [4]
    }

可以使用Arrays.equals

Arrays的equals方法能帮到你,或者采用转成list,然后removeAll,还剩下东西就是不等

呆瓜写法奉上for(int i=0;i<a;i++)
{
if(n[i]!=m[i])
{
System.out.print("False");
break;
}
if(i==a-1)
{
System.out.print("True");
}
}
if(a==0)
{
System.out.print("True");
}