因此,使用for循环,如果条件为false,它将继续迭代并进行简单变量更改。 使用while循环作为条件的while参数,一旦条件为false,循环将停止,并且应该保存一些迭代。
然而,while循环仍然比for循环慢一点!
但是,如果我将int值作为计数器,并计算迭代次数,则For循环如预期地执行了更多的迭代。 但是这一次,具有计数器的修改后的For方法的执行时间将比具有计数器的while方法慢得多!
有什么解释吗?
以下是使用for循环的代码:
for (int i = pairs.length - 1; i >= 0; i -= 2) {
//cpt++;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
if (duv > delta) {
execute();
}
}
执行时间:6473
使用计数器的执行时间:8299
迭代次数:2584401
以下是带有 while 循环的代码:
int i = pairs.length - 1;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
while (duv > delta) {
//cpt++;
execute();
u = pairs[i -= 2];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}
时间执行:6632
带计数器的时间执行:7163
迭代次数:9793
时间以毫秒为单位,我用不同大小的实例重复了这个实验,测量结果几乎相同。execute()方法更新delta值。getDistance()方法只是访问矩阵int[][]。
谢谢任何帮助。
duv <= delta
时中断 for 循环。 - Mister Smith