我正在编写一个算法,它在整个数组中从一端到一开始做一个大循环,里面有一个if条件 . 在条件第一次为假时,可以终止循环 .
因此,对于for循环,如果condition为false,则继续使用简单变量进行迭代 . 使用带有条件while参数的while循环,循环将在条件为false时停止并且应该保存一些迭代 .
但是,while循环仍然比for循环慢一点!
但是,如果我将一个int值作为计数器,并计算迭代次数,For循环按预期执行了更多的迭代 . 但是这次,使用计数器执行mofified 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 [] []访问 .
谢谢你的帮助 .