我在内存有限的环境中编程。所以我想知道哪个是最好的选择,为什么。它有显着差异吗? 不确定Java如何处理Assembly ...
选项A?对每个循环执行if检查
private static boolean checkState(int[][] matrix, int option){
for (int X=0; X < 5; X++)
for (int Y=0; Y < 5; Y++)
if (option == 0){ //if option is 0, checks if empty (-1 on all fields means empty in this case)
if (matrix[Y][X] != -1)
return false;
} else //if option is 1, checks if full (if at least one camp has -1, it means it's not full)
if (matrix[Y][X] == -1)
return false;
return true;
}
选项B? if语句在for循环之前完成,但for循环有两个(几乎相同)版本
private static boolean checkState(int[][] matrix, int option){
if (option == 0) {
for (int X=0; X < 5; X++)
for (int Y=0; Y < 5; Y++)
if (matrix[Y][X] != -1)
return false;
} else
for (int X=0; X < 5; X++)
for (int Y=0; Y < 5; Y++)
if (matrix[Y][X] == -1)
return false;
return true;
}
Pption C?两个不同的功能
private static boolean checkEmpty(int[][] matrix){
for (int X=0; X < 5; X++)
for (int Y=0; Y < 5; Y++)
if (matrix[Y][X] != -1)
return false;
return true;
}
private static boolean checkFull(int[][] matrix){
for (int X=0; X < 5; X++)
for (int Y=0; Y < 5; Y++)
if (matrix[Y][X] != -1)
return false;
return true;
}
答案 0 :(得分:0)
我认为选项B会更好,因为if条件只会被检查一次,如果它是真的if块中的代码将被执行,否则else块中的代码将被执行
选项A显然是一个糟糕的选择,因为if块会在循环的每次迭代中执行。
选项C似乎有点矫枉过正,没有必要为此事创建单独的方法。
答案 1 :(得分:0)
以上都不会在性能上产生任何相当大的差异。从技术上讲,选项C更好。定义分配给它的单个任务的定义定向方法对于性能和可读性更好。但对于5x5矩阵深度,您不会发现3种方法之间存在任何重大偏差。另外你的例子对内存消耗没有影响,但CPU ......是的。但是再一次为5x5矩阵,程序会在你眨眼之前完成,所以我不认为这会很重要。