性能差异For-Loop Foreach

时间:2016-09-09 08:44:30

标签: java

我总是问自己"使用什么"我应该使用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;
    }
}

什么会更好?或者在这种情况下真的没什么区别?

3 个答案:

答案 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项