Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个数组,仅忽略起始元素_Java - Fatal编程技术网

Java 比较两个数组,仅忽略起始元素

Java 比较两个数组,仅忽略起始元素,java,Java,我必须比较两个数组是否相等,只忽略第一个元素。是否可以在不迭代的情况下实现相同的结果您可以使用它来获取子阵列并执行相等性检查 注意,虽然没有显式迭代,但在幕后有迭代 代码捕捉: int arr1[] = { 1,2,3,4 }; int arr2[] = { 0,2,3,4 }; System.out.println(Arrays.equals( Arrays.copyOfRange(arr1, 1, arr1.length), Arrays.copyOfRan

我必须比较两个数组是否相等,只忽略第一个元素。是否可以在不迭代的情况下实现相同的结果

您可以使用它来获取子阵列并执行相等性检查

注意,虽然没有显式迭代,但在幕后有迭代

代码捕捉:

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)));

无论您尝试什么,为了检查两个数组是否相等,您必须检查每个元素。为此,您必须通过迭代数组来访问所有元素。尽管您可以通过使用一些内置函数避免手动执行此操作,但相同的逻辑在幕后发生。

假设两个数组分别命名为A和B

创建由除 第一个 System.arraycopyA,1,C,0,A.length。 创建由B中除第一个元素外的所有元素组成的数组D。 调用array.equals比较C和D。 另外,请记住伦吉思的观点

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已经指出的,在幕后有迭代


不过array.equals将使用循环。

我相信您或您调用的方法将必须遍历这些数组,因为array不是对象,也没有equals方法

运算符==仅在原语类型的情况下比较值,在其他情况下比较指针内存地址。这意味着只有当两个数组都是一个且相同时,才会得到true;如果两个数组是两个独立但相同的数组,则会得到false

复制数组的一部分并对其进行比较将导致通过数组进行多次迭代,即使这可能并不明显。获取两个数组的子数组时,每个数组至少包含一次迭代,并将它们与另一次迭代进行比较

也就是说,您可以使用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;
}

希望这有帮助。

什么数组?我打赌你需要迭代而不是遍历数组,你能访问它的所有元素吗?+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;
}