在Java中比较二维整数数组的最佳方法是什么?

9
我想知道比较两个二维整数数组的最佳、最快和最简单的方法。 数组的长度相同。(其中一个数组是临时数组)。

听起来像作业问题? 先用最简单的方法。 从一个数组开始,遍历另一个数组,在每个迭代步骤中应用您的条件检查。 那种方法非常低效,取决于数组的结构(即它们是否已排序)、您要搜索什么等,您可能会加速事情。 自问为什么不好,并且什么条件会使找到所需内容更容易。 - Rob Segal
你需要在问题中添加更多的定义,以便我们能够提供帮助。你有两个一维数组还是两个二维数组/表格?你使用什么来存储你的数组?是Integer[]还是List<>的实现?你尝试过什么,为什么不喜欢它? - Simon
当你说“比较”时,是指测试逐个元素的相等性吗?如果是这样,那么Arrays.equals就是你的好朋友。如果你所说的“比较”意味着其他事情,你能详细说明一下吗? - Will
目的只是为了检查这两个二维数组是否相同,以便我可以终止应用程序。这是两个长度相同的二维数组。 - firestruq
只需要检查值是否相同。 - firestruq
2个回答

13

Edan写道:

只需要看值是否相同

如果您想要检查所有元素的a[i][j]b[i][j]是否相等,只需使用Arrays.deepEquals(a, b)即可。


4

请查看java.util.Arrays,它有许多数组实用程序,您应该熟悉它们。

import java.util.Arrays;

int[][] arr1;
int[][] arr2;
//...
if (Arrays.deepEquals(arr1, arr2)) //...

来自 API:

如果两个指定的数组彼此 深度相等,则返回true。与equals(Object[],Object[])方法不同,此方法适用于任意深度嵌套数组的比较。

请注意,在Java中,int[][]Object[]的子类型。Java实际上没有真正的二维数组,而是由数组组成的数组。

下面是嵌套数组的equalsdeepEquals之间的区别(请注意,默认情况下,Java使用零作为元素初始化int数组)。

    import java.util.Arrays;
    //...

    System.out.println((new int[1]).equals(new int[1]));
    // prints "false"

    System.out.println(Arrays.equals(
        new int[1],
        new int[1]
    )); // prints "true"
    // invoked equals(int[], int[]) overload

    System.out.println(Arrays.equals(
        new int[1][1],
        new int[1][1]
    )); // prints "false"
    // invoked equals(Object[], Object[]) overload

    System.out.println(Arrays.deepEquals(
        new int[1][1],
        new int[1][1]
    )); // prints "true"

相关问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接