ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-使用for语句和while语句向前移动迭代器之间的区别

2019-10-10 12:04:58  阅读:206  来源: 互联网

标签:java while-loop for-loop iterator


当我使用对象的迭代器时,我会使用while循环(如学习Java的每本书中所写,如Bruce Eckel的《 Thinking in Java》中所述):

Iterator it=...

while(it.hasNext()){
    //...
}

但是有时候我看到有人代替使用for循环:

Iterator it=...
for (Iterator it=...; it.hasNext();){
    //...
}

我不明白这个选择:

>当我有一个有序序列(作为数组)或该步骤的特殊规则(通常声明为简单的增量计数器)时,可以使用for循环.
>当循环结束时,我使用while循环,但我没有此约束,只有退出的逻辑条件.

这是没有其他原因的样式编码问题,还是存在我不知道的其他逻辑(例如性能)?

感谢您的每一个反馈

解决方法:

for循环的正确语法是:

for (Iterator it = ...; it.hasNext(); ){
    //...
}

(代码中的前面的声明以及for循环标题中的多余分号都是多余的.)

无论您使用此语法还是while循环都取决于您的口味,二者的含义完全相同. for循环的通用语法为:

for (<init stmt>; <loop cond>; <iterate stmt>) { <body>; }

等效于:

<init stmt>;
while (<loop cond>) { <body>; <iterate stmt>; }

编辑:实际上,如果使用init语句声明变量,则上述两种形式并不完全等效.在这种情况下,迭代器变量的范围将有所不同.对于for循环,在while循环的情况下,作用域仅限于循环本身,但是,作用域扩展到了封闭块的末尾(不足为奇,因为声明位于循环之外).

另外,正如其他人指出的那样,在较新版本的Java中,for循环有一种简写形式:

for (Iterator<Foo> it = myIterable.iterator(); it.hasNext(); ) {
    Foo foo = it.next();
    //...
}

可以写成:

for (Foo foo : myIterable) {
    //...
}

使用这种形式,您当然会丢失对迭代器的直接引用,这是必需的,例如,如果要在迭代时从集合中删除项目.

标签:java,while-loop,for-loop,iterator
来源: https://codeday.me/bug/20191010/1886665.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有