使2D数组不等式检查更快

时间:2018-04-12 20:10:26

标签: java arrays performance for-loop compare

我在学校工作Al项目一切运作良好,但有点慢。
在我的项目中,我已经覆盖了等于方法。

@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        } else if (obj instanceof map) {
            map m = (map) obj;
            for (int i = 0; i < mapSize; i++) {
                for (int j = 0; j < mapSize; j++) {
                    if (m.board[i][j] != board[i][j])
                        return false;
                }
            }
        }
        return true;
    } 

我弄清楚我是否以交错的方式编写循环以检查数组的前半部分80%的时间在上半部分获得通过而剩余的20%我将在之后检查。所以我认为它的工作速度要快50%

 for (int i = 0; i < mapSize; i++) {
                for (int j = i%2 ; j < mapSize; j+=2) {
                    if (m.board[i][j] != board[i][j])
                        return false;
                }
            }

for (int i = 0; i < mapSize; i++) {
                    for (int j = (i+1)%2 ; j < mapSize; j+=2) {
                        if (m.board[i][j] != board[i][j])
                            return false;
                    }
                }
分开for循环和几次测试之后,它似乎变得越来越慢,我不知道为什么只是。为什么它需要太多的时间以及如何使它更快 提前谢谢

2 个答案:

答案 0 :(得分:0)

从理论的角度来看,无法比较两个2-D阵列的时间小于O(n * m),其中n =行数,m =列数。

但是,在您的情况下,有可能跟踪“董事会”。您正在使用它,并且假设它们开始相同,只需要跟踪每块板上执行的操作,直到操作将其中一块板与其他板分开。

答案 1 :(得分:0)

首先,当类不匹配时(第一个实现中的最后一行),equals的默认返回值应为false,Java中的类名应为大写{{1} }。

其次,比较数组相等性的最有效方法可能是Arrays.equalsArrays.deepEquals,因为它们可能更适合目标机器。

最后,你确定问题是Map太慢吗?您是否使用过分析器找出丢失时间最多的地方?也许您可以找到不经常调用equals或跟踪数据修改的方法。或者你可以使用哈希来快速检查不平等。