我在学校工作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循环和几次测试之后,它似乎变得越来越慢,我不知道为什么只是。为什么它需要太多的时间以及如何使它更快
提前谢谢
答案 0 :(得分:0)
从理论的角度来看,无法比较两个2-D阵列的时间小于O(n * m),其中n =行数,m =列数。
但是,在您的情况下,有可能跟踪“董事会”。您正在使用它,并且假设它们开始相同,只需要跟踪每块板上执行的操作,直到操作将其中一块板与其他板分开。
答案 1 :(得分:0)
首先,当类不匹配时(第一个实现中的最后一行),equals
的默认返回值应为false
,Java中的类名应为大写{{1} }。
其次,比较数组相等性的最有效方法可能是Arrays.equals
或Arrays.deepEquals
,因为它们可能更适合目标机器。
最后,你确定问题是Map
太慢吗?您是否使用过分析器找出丢失时间最多的地方?也许您可以找到不经常调用equals
或跟踪数据修改的方法。或者你可以使用哈希来快速检查不平等。