zoukankan      html  css  js  c++  java
  • for循环与foreach的性能比较

    JDK1.5开始新增了foreach循环,在语法上比for循环简洁;

    但foreach并不是for循环的语法糖,而可以说是iterator的语法糖;

    普通for循环:

    for(int i=0;i<100;i++)
    {
        a = i;
    }    
    

     

    foreach循环:

    for(int i : integers)
    {
       a = i;
    }
    

     

    实质上等同于:

    for(Iterator<Integer> i=list.iterator();i.hasNext();)
    {
         a = i.next();  
    }
    

      

    区别:

    一个按顺序遍历,一个使用iterator迭代器遍历;

    从数据结构来说,画重点:

    for循环是随机访问元素,foreach是顺序链表访问元素;

    性能上:

    对于arraylist,是顺序表,使用for循环可以顺序访问,速度较快;使用foreach会比for循环稍慢一些。

    对于linkedlist,是单链表,使用for循环每次都要从第一个元素读取next域来读取,速度非常慢;使用foreach可以直接读取当前结点,数据较快;

    举个栗子:

    顺序表 a[3]

      用for循环,从a[0]开始直接读到元素,接着直接读a[1];(顺序表的优点,随机访问)

      用foreach,  得到a[0]-a[2]的全部地址放入队列,按顺序取出队里里的地址来访问元素;

    单链表 b[3]

      用for循环,从a[0]开始读元素、然后通过a[0]的next读到a[1]元素、通过a[0]的next的next读到a[2]元素,以此类推,性能影响较大,慎用!

      用foreach, 得到a[0]-a[2]的全部地址放入队列,按顺序取出队里里的地址来访问元素;

  • 相关阅读:
    HDU 1240 Asteroids!【BFS】
    POJ 2251 Dungeon Master【BFS】
    HDU 1548 A strange lift【BFS】
    HDU 1171 Big Event in HDU【01背包】
    HDU 1505 City Game【DP】
    POJ 2386 Lake Counting【BFS】
    POJ 3278 Catch That Cow【BFS】
    HDU 1506 Largest Rectangle in a Histogram【DP】
    随想而已
    HDU 1285 确定比赛名次【拓扑排序】
  • 原文地址:https://www.cnblogs.com/chenhao0302/p/9200863.html
Copyright © 2011-2022 走看看