比较两个只忽略start元素的数组

时间:2013-01-10 11:09:17

标签: java

我必须比较两个数组是否相等,只忽略第一个元素。是否有可能在没有迭代的情况下实现相同的目标

6 个答案:

答案 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.

  1. 创建包含A中除A之外的所有元素的数组C. 第一个 (System.arraycopy(A, 1, C, 0, A.length();)。
  2. 创建数组D,其中包含B中除第一个元素之外的所有元素。
  3. 致电Arrays.equals()以比较C和D.
  4. 另外,请记住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));
Arrays.equals将使用循环。

答案 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;
}

希望这有帮助。