在检查之前声明循环限制的收益是多少?

时间:2014-05-13 09:29:38

标签: java performance for-loop

如果有的话,获得的收益是多少:

for (int i = 0, size = foo.size(); i < size; i++) {}

而不是:

for (int i = 0 ; i < foo.size(); i++) {}

(foo是List个对象)

2 个答案:

答案 0 :(得分:5)

嗯,这意味着您只评估size()一次而不是每次迭代一次。从理论上讲,这可能是一次性能上的胜利 - 计算尺寸实际上是非常昂贵的。 (例如,你可以有一个链表实现,它不记得它的大小,但实际上必须遍历整个列表。可以说,如果你发现自己处于这种情况,更好的解决方案就是使用更好的数据结构......如果size()价格昂贵,那么按索引访问也可能很昂贵。)

实际上,标准集合具有非常快速的size()方法,因此它通常无关紧要,并且会损害可读性(IMO)。当然,如果你不需要索引,那么无论如何使用增强的for循环都会更具可读性......

答案 1 :(得分:1)

对于第一种情况,List的大小只计算一次。

对于第二种情况,每次在比赛期间计算列表foo的大小。

对我而言foo列表的类型为String i For Each循环

for(String str: foo){

}