如果有的话,获得的收益是多少:
for (int i = 0, size = foo.size(); i < size; i++) {}
而不是:
for (int i = 0 ; i < foo.size(); i++) {}
(foo是List
个对象)
答案 0 :(得分:5)
嗯,这意味着您只评估size()
一次而不是每次迭代一次。从理论上讲,这可能是一次性能上的胜利 - 计算尺寸实际上是非常昂贵的。 (例如,你可以有一个链表实现,它不记得它的大小,但实际上必须遍历整个列表。可以说,如果你发现自己处于这种情况,更好的解决方案就是使用更好的数据结构......如果size()
价格昂贵,那么按索引访问也可能很昂贵。)
实际上,标准集合具有非常快速的size()
方法,因此它通常无关紧要,并且会损害可读性(IMO)。当然,如果你不需要索引,那么无论如何使用增强的for循环都会更具可读性......
答案 1 :(得分:1)
对于第一种情况,List的大小只计算一次。
对于第二种情况,每次在比赛期间计算列表foo
的大小。
对我而言foo
列表的类型为String
i For Each
循环
for(String str: foo){
}