【发布时间】:2016-02-08 12:01:03
【问题描述】:
我想知道这些之间是否有区别:
ArrayList<Example> list = new ArrayList<Example>
1-)
for(int i = 0; i < list.size(); i++) {
list.get(i).doSomething();
}
2-)
for(Example example : list) {
example.doSomething();
}
如果没有任何区别,哪一种更常见或更有效?
【问题讨论】:
-
有什么区别?
-
过早优化:不要。只是...不要。如果您没有速度问题,请不要解决它。在 99.9% 的情况下,您不会注意到两者之间的区别 - 除了显而易见的情况外,您有一个索引(并且没有迭代器)并且它仅适用于具有 get(x) 方法的方法,而其他你没有索引,一个迭代器,它适用于任何集合。
-
第二种效率更高。因为每个 .get(i) 都会启动一个随机访问搜索。
-
@Reinard 可能是的,具体取决于迭代的列表。示例中的
ArrayList没有速度差异,但LinkedList会显示出明显的差异。 -
@JaroslawPawlak 您应该始终使用 for-each 循环,除非您出于某种原因需要索引。 (或者在 Java 8 中,您可以使用流。)并不是因为它更快(通常不是),而是因为它更易于阅读。
标签: java