黑马程序员技术交流社区

标题: 哪位师兄帮忙解读以下这段代码? [打印本页]

作者: 冷月霜飞    时间: 2015-5-18 18:47
标题: 哪位师兄帮忙解读以下这段代码?
  1. for (Iterator it = coll.iterator(); it.hasNext();) {
  2.                         Student student = (Student) it.next();
  3.                         System.out.println(student.getName());
  4.                 }
复制代码


对于以上代码有点看不懂,for循环括号内依次不应该是初始化值,条件表达式吗?
作者: as604049322    时间: 2015-5-18 19:18
任何for循环都可以用while来换
for(初始化:成立条件:每次循环结束前执行){
  主体代码......
}
就可以转换为:

初始化....
while(成立条件){
  主体代码......
  
  每次循环结束前执行
}

甚至可以变成

初始化....
while(true){
  if(!成立条件)
    break;
   
  主体代码......
  
  每次循环结束前执行
}
那么
for (Iterator it = coll.iterator(); it.hasNext();) {
    Student student = (Student) it.next();
    System.out.println(student.getName());
}

就可以变成:
Iterator it = coll.iterator();
while (it.hasNext()) {
    Student student = (Student) it.next();
    System.out.println(student.getName());
}

或者
Iterator it = coll.iterator();
while (true) {
    if(!it.hasNext())
        break;
    Student student = (Student) it.next();
    System.out.println(student.getName());
}

那么上面的代码在空间占用的角度有什么区别呢?
区别就是for循环在运行完成后,变量it就被释放了,外界不能继续使用,而while循环执行完成后变量it依然存在,可以继续使用。

从空间占用上来说,我选择使用for循环完成迭代,但因此导致你看不懂的话,我还是改用while循环把



作者: 348532020    时间: 2015-5-18 20:21
楼上完全正解。
就是Iterator it = coll.iterator(); 作为初始化条件, it.hasNext();作为判断条件,然后最后增量表达式没有,因为不需要增量,只判断 it.hasNext()真假值就行了。所以可以那么写。
作者: JARVIS_YJ    时间: 2015-5-18 20:27
楼上正解
作者: 狙神自傲    时间: 2015-5-18 21:11
不得不佩服二楼。
作者: 冷月霜飞    时间: 2015-5-18 21:17
as604049322 发表于 2015-5-18 19:18
任何for循环都可以用while来换
for(初始化:成立条件:每次循环结束前执行){
  主体代码......

谢谢师兄回复!
作者: 0416朱珅平    时间: 2015-5-18 22:15
这个一个迭代器,可以遍历数组 集合 等等, 可以这样写
作者: 雪风飞花    时间: 2015-5-18 22:23
二楼给得好详细
作者: 黄冬    时间: 2015-5-18 22:41
二楼说的好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2