我正在写一个算法,从里面到if条件从一个结束到一个整数数组做一个大循环。在条件错误的第一次,循环可以终止。Java For循环vs While循环,奇怪的行为和时间表现
因此,使用for循环,如果条件为false,它将继续使用简单变量更改进行迭代。 使用while参数作为条件,while循环将在条件为false时停止,并应保存一些迭代。
但是,while循环仍然比for循环慢一点!
但是,如果我把一个int值作为计数器,并对迭代进行计数,For循环如预期的那样执行更多的迭代。 但是这一次,使用计数器的mofified For方法的执行时间将比使用计数器的while方法慢得多!
任何解释?
这里用的代码循环:
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
时间是毫秒,我有不同的大小intances多次反复实验,这些措施几乎保持不变。 execute()方法更新增量值。方法getDistance()只是一个矩阵int [] []访问。
感谢您的任何帮助。
你可以用两个循环完成同样的事情。例如::你可以在duv <= delta'时打开for循环。 –
你用什么单位进行时间测量?毫秒?如果是这样,我认为你正在寻找一个微基准问题。 –
我同意,我的问题是为什么时间几乎与while循环相同,因为它正在做更多的迭代。为什么当我把一个简单的柜台变得更“正常”? –