当前位置:  开发笔记 > 编程语言 > 正文

将Iterator向前移动到for语句和while语句之间的区别

如何解决《将Iterator向前移动到for语句和while语句之间的区别》经验,为你挑选了3个好方法。

当我使用对象的Iterator时,我使用while循环(如每本书中学习Java,如Bruce Eckel的Thinking in Java):

Iterator it=...

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

但有时我看到的是有人使用for循环:

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

我不明白这个选择:

当我有一个带有序数序列的集合(作为数组)或者有一个特殊的步骤规则(通常声明为一个简单的增量)时,我使用for循环counter++.

我在循环结束时使用while循环,我没有这个约束,但只有退出的逻辑条件.

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

感谢您的每一个反馈



1> David Hanak..:

for循环的正确语法是:

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

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

无论你使用这种语法还是while循环是一个品味问题,两者都转化为完全相同.for循环的通用语法是:

for (; ; ) { ; }

这相当于:

;
while () { ; ; }

编辑:实际上,如果(如问题中)变量是用init语句声明的,那么上述两种形式并不完全等效.在这种情况下,迭代器变量的范围会有所不同.对于for循环,范围仅限于循环本身,在while循环的情况下,范围扩展到封闭块的末尾(没有什么大惊喜,因为声明在循环之外).

另外,正如其他人所指出的,在较新版本的Java中,for循环有一个简写符号:

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

可以写成:

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

使用此表单时,您当然会失去对迭代器的直接引用,这是必要的,例如,如果要在迭代时从集合中删除项目.



2> tddmonkey..:

它只是一种风格的东西,就像你在使用带索引的东西时我更喜欢for循环.如果你正在使用Java 5,你当然应该在集合上使用foreach循环:

Collection someCollection = someCollectionOfString();
for (String element : someCollection) {
....
}



3> matt b..:

声明Iteratorfor循环的目的是最小化变量的范围,这是一个很好的做法.

当您声明Iterator循环外部时,循环完成后引用仍然有效/有效.99.99%的时间,你不需要继续使用Iterator循环完成后,所以这样的风格可能会导致这样的错误:

//iterate over first collection
Iterator it1 = collection1.iterator();
while(it1.hasNext()) {
   //blah blah
}

//iterate over second collection
Iterator it2 = collection2.iterator();
while(it1.hasNext()) {
   //oops copy and paste error! it1 has no more elements at this point
}

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有