A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. for (Iterator it = coll.iterator(); it.hasNext();) {
  2.                         Student student = (Student) it.next();
  3.                         System.out.println(student.getName());
  4.                 }
复制代码


对于以上代码有点看不懂,for循环括号内依次不应该是初始化值,条件表达式吗?

8 个回复

倒序浏览
任何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循环把


评分

参与人数 1技术分 +2 收起 理由
万合天宜 + 2

查看全部评分

回复 使用道具 举报 4 0
楼上完全正解。
就是Iterator it = coll.iterator(); 作为初始化条件, it.hasNext();作为判断条件,然后最后增量表达式没有,因为不需要增量,只判断 it.hasNext()真假值就行了。所以可以那么写。
回复 使用道具 举报
楼上正解
回复 使用道具 举报
不得不佩服二楼。
回复 使用道具 举报
as604049322 发表于 2015-5-18 19:18
任何for循环都可以用while来换
for(初始化:成立条件:每次循环结束前执行){
  主体代码......

谢谢师兄回复!
回复 使用道具 举报
这个一个迭代器,可以遍历数组 集合 等等, 可以这样写
回复 使用道具 举报
二楼给得好详细
回复 使用道具 举报
黄冬 中级黑马 2015-5-18 22:41:34
9#
二楼说的好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马