我必须比较两个数组是否相等,只忽略第一个元素。是否有可能在没有迭代的情况下实现相同的目标
答案 0 :(得分:9)
您可以使用Arrays.copyOfRange()
获取子数组,并Arrays.equals()
执行相等检查。
请注意,尽管没有明确的迭代 - 在幕后有迭代。
代码快照:
int arr1[] = { 1,2,3,4 };
int arr2[] = { 0,2,3,4 };
System.out.println(Arrays.equals(
Arrays.copyOfRange(arr1, 1, arr1.length),
Arrays.copyOfRange(arr2, 1, arr2.length)));
答案 1 :(得分:1)
无论你尝试什么,为了检查两个数组是否相等,你必须检查每个元素。为此,你必须通过遍历数组来访问所有元素。但是,你可以避免通过使用一些内置函数,在场景后面发生相同的逻辑。
答案 2 :(得分:0)
是
假设你的两个数组名为A和B.
System.arraycopy(A, 1, C, 0, A.length();
)。Arrays.equals()
以比较C和D. 另外,请记住Renjiths的观点。
答案 3 :(得分:0)
String[] array1 = {"hi","hi2"};
List<String> temp = new ArrayList<String>(Arrays.asList(array1));
String[] array2 = {"hi3","hi2"};
List<String> temp2 = new ArrayList<String>(Arrays.asList(array2));
boolean condition = temp.subList(1, temp.size()).equals(temp2.subList(1, temp2.size()));
正如amit 已经指出的那样,幕后有迭代
答案 4 :(得分:0)
Arrays.equals(Arrays.asList(array1).subList(1, array1.length), Arrays.asList(array2).subList(1, array2.length));
答案 5 :(得分:0)
我相信你(或你调用的方法)将不得不迭代这些数组,因为数组不是一个对象而且没有equals方法。
运算符==仅在基本类型的情况下比较值,它在其他情况下比较指针(内存地址)。这意味着只有当两个数组都是一个且相同时才会变为真,如果数组是两个独立但相同的数组,则会得到错误。
复制一部分数组并比较它们将导致通过数组进行多次迭代,即使它可能并不明显。 (获取两个数组的子数组每个至少包含1次迭代,将它们与另一个进行比较。)
那就是说你可以使用1个循环来迭代数组并逐个比较值,从索引1开始跳过第一个元素。在以下代码中将对象类型参数替换为数组的类型:
private boolean compareMyArrays(Object[] array1, Object[] array2) {
if ((array1 == null) && (array2 == null)) {
return true;
}
if ((array1 == null) || (array2 == null)) {
return false;
}
if (array1.length != array2.length) {
return false;
}
for (int i = 1; i < array1.lenght; i++) {
if ( !array1[i].equals(array2[i]) ) {
return false;
}
}
return true;
}
希望这有帮助。