如图,判断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");
}