我必须比较两个数组是否相等,只忽略第一个元素。是否可以在不迭代的情况下实现相同的目标
问问题
309 次
6 回答
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)));
于 2013-01-10T11:11:25.267 回答
1
无论您尝试什么,为了检查两个数组是否相等,您必须检查每个元素。为此,您必须通过遍历数组来访问所有元素。尽管如此,您可以通过使用一些内置来避免手动执行此操作功能,相同的逻辑发生在幕后。
于 2013-01-10T11:13:46.300 回答
0
是的。
假设您的两个数组分别命名为 A 和 B。
创建由 A 中除第一个元素(System.arraycopy(A, 1, C, 0, A.length();
)之外的所有元素组成的数组 C。- 创建由 B 中除第一个元素之外的所有元素组成的数组 D。
- 调用
Arrays.equals()
比较 C 和 D。
另外,请记住 Renjiths 的观点。
于 2013-01-10T11:15:26.500 回答
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()));
正如阿米特已经指出的那样,幕后有迭代
于 2013-01-10T11:16:04.937 回答
0
Arrays.equals(Arrays.asList(array1).subList(1, array1.length), Arrays.asList(array2).subList(1, array2.length));
Arrays.equals 将使用循环。
于 2013-01-10T11:16:34.353 回答
0
我相信您(或您调用的方法)将不得不遍历这些数组,因为数组不是对象并且没有 equals 方法。
运算符 == 仅在原始类型的情况下比较值,在其他情况下它比较指针(内存地址)。这意味着只有当两个数组都是一个且相同时,你才会得到真,如果数组是两个独立但相同的数组,你会得到假。
复制一部分数组并比较它们会导致数组的多次迭代,即使它可能并不明显。(获取两个数组的子数组每个都包含至少 1 次迭代,并将它们进行比较。)
也就是说,您可以使用 1 个周期来遍历数组并逐个比较值,从索引 1 开始跳过第一个元素。在以下代码中将 Object 类型参数替换为您的数组类型:
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;
}
希望这可以帮助。
于 2013-01-10T11:45:01.403 回答