以下两个片段的运行时间是否存在差异?
SNIPPET 1:
for ( Object obj : collection ) {
step1( obj );
step2( obj );
step3( obj );
}
SNIPPET 2:
for ( Object obj : collection ) {
step1( obj );
}
for ( Object obj : collection ) {
step2( obj );
}
for ( Object obj : collection ) {
step3( obj );
}
答案 0 :(得分:1)
当然。第一个代码段仅在集合中迭代一次,而第二个代码段则单独执行3次。第二个片段也违反了DRY原则。
答案 1 :(得分:0)
如果您询问任何语言,SNIPPET 1应该更快。
答案 2 :(得分:0)
迭代次数为3次。
此外,你将调用step1(obj)n次,然后调用step2(obj)n次,然后调用step3(obj)n次。
答案 3 :(得分:0)
如果你的一个方法调用将抛出异常,让我们在迭代过程中说step1,那么第二个版本将比第一个版本早停止。但是如果step3为第一个元素抛出异常,那么第一个版本会更快。所以这两个版本在语义上并不相同。
答案 4 :(得分:0)
有什么区别吗?当然。
重要的是有区别吗?这一切都取决于。
如果StepN()
需要几纳秒,那么是的。否则,可能不会。
答案 5 :(得分:0)
您是否具体询问性能?
在这种情况下,答案取决于集合的迭代器的速度:如果Next()
对于该特定迭代器来说是一个昂贵的操作,那么你在第一个迭代器中支付N次成本版本和后者的3N次。如果你的集合是一个向量,这是无关紧要的,但是当你的集合是一个慢速文件I / O操作的接口时,这是更严重的。