编程基础_迭代和遍历各是什么概念?二者区别和联系是什么?

笔者编程水平还处于初级阶段,平时使用列表的时候经常用到遍历
比如:

    //java
    for(int i = 0 ; i < 100 ; i ++){
        System.out.println(i);
    }

也用到过迭代
比如:

    //java
    List<String> list = new List<String>(){"a" , "b", "c"};
    for(String str : list){
        System.out.println(str);
    }

但是一直对迭代和遍历这两个概念理解很模糊,没有一个明确的概念。
烦请了解此问题的同志们

1.对迭代和遍历下一个比较明确的定义,定义中应该包含他们各自的特性。
2.比较下他们的关系、区别(当然,如果定义足够明确,二者的差异也就自己出来了)。

感激不尽

阅读 8.2k
3 个回答

抠字眼的时候请多用英文

遍历 ~ Traverse 访问一个集合(广义)的每个元素
迭代 ~ Iterate 反复调用同一个过程最终达成目的,这个过程如果是一个函数,那就是递归,如果是一个循环体,那就是狭义上的迭代。递归和迭代之间的关系、转换、优化等等又是另一个故事了。

总之遍历是目的,迭代是手段

首先想知道你确定自己的迭代栗子时java的么?我怎么记得Java中的迭代式类似如下面的代码:

 for (String str : list) {   
     System.out.println(str); //逐个输出数组元素的值   
 }
  1. 遍历:对于集合数据而言,访问所有的数据即为遍历。遍历的方法可以用递归或者迭代。
    迭代:一般是用同一个参数来表示每个集合元素,用循环来实现。
  2. 个人感觉不必背下来两者的概念,而是要知道两者的区别。在《Effective Java》中,作者推荐“使用for-each循环优先于传统的for循环”(第二版第46条)。主要原因如下:

    a). 索引变量i出现三次,容易出错;
    b). 有些情况下,有一定性能优势,对边界值只计算一次;
    c). 代码更加简洁;
    d). 可以预防Bug。

但是有些情况是不能使用for-each循环的:

a). 过滤--如果需要遍历集合,并删除元素,需要显式的迭代器,以便可以调用它的remove方法。  
b). 转换--如果需要遍历列表或者数组,并取代它部分或者全部的元素值,就需要列表迭代器或者数组索引,以便设定元素的值。
c). 平行迭代--并行遍历多个集合,就需要显式控制迭代器或者索引变量,以便所有迭代器或者索引变量都可以得到同步前移。

更多的话楼主还是去看一下原书吧~
新手上路,请多包涵

回答很赞,多用英文更是提供了一个非常棒的思路。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏