gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:59:09 33 4
gpt4 key购买 nike

当我使用对象的迭代器时,我使用了一个while 循环(如 Bruce Eckel 的Thinking in Java 所写的每本学习 Java 的书):

Iterator it=...

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

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

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

我不明白这个选择:

  • 当我有一个具有序数序列(作为数组)或具有特殊步骤规则(通常声明为简单增量 counter++)的集合时,我使用 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 循环的情况下,范围扩展到封闭 block 的末尾(没什么大惊奇的,因为声明在循环之外)。

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

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

可以写成:

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

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

关于java - 使用 for 语句和 while 语句向前移动迭代器之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/515562/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com