我总是问自己"使用什么"我应该使用for-loop还是foreach。 在我看来,它是同一个"。我知道迭代列表等是一个更好的foreach,但如果我们有以下情况怎么办:
for (String zipCode : zipCodes) {
if (zipCode.equals(zip)) {
return true;
}
}
或
for (int i = 0; i < zipCodes.length; i++) {
if (zipCodes[i].equals(zip)) {
return true;
}
}
什么会更好?或者在这种情况下真的没什么区别?
答案 0 :(得分:3)
现在优化程度较低,因为任何差异都不会引起注意,除非您需要处理大量数据。此外,如果您使用了Collection,性能将取决于所选的实现。
您应该真正考虑的是代码的质量。规则是你应该尽可能少地使用元素来尽可能清楚地呈现逻辑。第二个解决方案引入了一个新元素,即i索引,实际上并不需要它,只会使代码变得更加复杂。如果您确实需要知道每次迭代中的索引,则只使用fori循环。
因此,从代码质量的角度来看,您应该使用第一个解决方案: - )
答案 1 :(得分:2)
如果zipCodes[i]
不是O(1),那么第二种情况的表现会更糟。 (也就是说,我认为尚未在Java中存在一个容器,其中[]
不 O(1))。换句话说,短格式for
循环不能更慢。
此外,短格式for
循环更清晰,除非速度重要,否则这应该是首要考虑因素。
答案 2 :(得分:1)
请注意,使用for-each循环不会降低性能, 即使是阵列。实际上,它可能会提供轻微的性能优势 在某些情况下,通过一个普通的for循环,因为它计算 数组索引的限制只有一次。
Joshua Bloch在Effective Java中的第46项