foreach与for循环效率对比

以下内容整理自互联网,仅用于个人学习


for循环

  • for需要获取容器大小,如果计算大小比较耗时,那么for循环效率会很低。
  • for循环是根据容器大小防止越界,因此每次循环需要进行一次比较。

foreach

ForEach 编译成字节码之后,使用的是迭代器实现的,所以本质上是通过迭代器遍历的。
将foreach代码反编译后得到的代码如下:

public static void testForEach(List list) {  
    for (Iterator iterator = list.iterator(); iterator.hasNext();) {  
        Object t = iterator.next();  
        Object obj = t;  
    }  
} 

可以看到,只比迭代器遍历多了生成中间变量这一步,因此性能也略微下降了一些。

  • 无需获取容器大小。
  • 需要创建额外的迭代器变量。
  • 遍历期间得到的是对象,没有索引位置信息,因此没办法将指定索引位置对象替换为新对象,也就是不能赋值。

效率对比

由于for循环的特性,每次循环都会进行比较,所以效率上不如foreach。
但这个结论并不是绝对的,选择for或者foreach,还要考虑几点:

  • 如果只是读数据,优先选择foreach,因为效率高,而且代码简单,方便;
  • 如果要写数据,即替换指定索引位置处的对象,就只能选择for了。

你可能感兴趣的:(foreach与for循环效率对比)