当前位置: 首页 > 面试题库 >

Java中增强的for循环和迭代器的优点是什么?

陶英纵
2023-03-14
问题内容

谁能告诉我Java +5中Enhanced for loop和Iterators的优点是什么?


问题答案:

Stephen Colebourne(Joda-
Time,JSR-310等)对优点和缺点进行了很好的总结,针对每个循环迭代控制建议进行了增强,以在Java 7中进行扩展:

功能概要:

扩展Java 5 for-each循环,以允许访问循环索引(无论是第一次还是最后一次迭代),并删除当前项。

主要优势

for-each循环几乎可以肯定是Java 5中最流行的功能。 它之所以起作用,是因为它提高了抽象级别-
无需表达如何循环遍历列表或数组的低级细节(使用索引或迭代器),开发人员只是简单地说他们想循环播放,其余部分由该语言负责。
但是,一旦开发人员需要访问索引或删除项目,所有的好处就会丢失

针对每项工作的原始Java
5在旨在解决80%案例的许多问题上采取了相对保守的立场。但是,循环是编码中的一种常见形式,因此剩余的20%未被解决的代码占了很大一部分。

将循环从转换为基于索引或迭代器的过程是痛苦的。这是因为 旧的循环样式 如果明显较低, 则更加冗长而不清楚
。这也是很痛苦的,因为大多数IDE不支持这种“重构”。

主要优点:

通用编码习惯用比目前更高的抽象性表示。这有助于 提高可读性和清晰度

综上所述,增强的for循环提供了简洁的高级语法来遍历列表或数组,从而提高了清晰度和可读性。但是,它缺少一些部分:允许访问索引循环或删除项目。

也可以看看

  • Java 7-每个循环控制访问
  • 斯蒂芬·科尔本(Stephen Colebourne)的原始文章


 类似资料:
  • 问题内容: 我被要求在我的编码中使用增强循环。 我只学习了如何使用传统循环,因此不知道它和增强循环之间的区别。 增强循环与Java中的传统循环有何不同? 有什么复杂的地方我应该注意哪些教程往往不提? 问题答案: 增强的for循环: 传统的for循环

  • 问题内容: 我正在从Java切换到C ,并且想知道C 是否包含我在Java中使用的增强的for循环,例如: 在C ++中是否可能有相同的“快捷方式”? 问题答案: 在C ++ 11中,如果编译器支持,则可以。这称为基于范围的。 它适用于C样式数组以及具有函数并返回迭代器的任何类型。例:

  • 问题内容: 在玩循环的同时创建了以下代码。下面的代码将斐波那契值存储到数组中,然后使用for循环将其打印出来。 上面的代码工作正常。但是,第一次将它们放在一起时,我使用了增强的for循环来打印出值(代码中的第二个for循环)。可以很好地编译,但是运行时得到以下信息: 我不明白出了什么问题。更改第二个循环不应更改值(您会注意到斐波那契值是错误的(即缺少值))。而且我不明白为什么简单的增强型for循环

  • 问题内容: 我读到 增强的for循环 比普通的 for循环 更有效: http://developer.android.com/guide/practices/performance.html#foreach 当我搜索它们的效率之间的差异时,我发现的是:如果是普通的for循环,我们需要一个额外的步骤来找出数组的长度或大小等, 但这是唯一的原因,增强的for循环优于普通的for循环吗?在那种情况下,

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚

  • 问题内容: 我想了解更多有关的信息,所以如果我错了,请纠正我。 迭代器是一个对象,该对象具有指向下一个对象的指针,并作为缓冲区或流(即,链表)读取。它们特别有效,因为它们所做的只是通过引用而不是使用索引来告诉您下一步是什么。 但是我仍然不明白为什么会发生以下行为: 经过迭代器()的第一个循环后,就好像它已被消耗并且留空,因此第二个循环()不输出任何内容。 但是,我从未为变量分配新值。 循环幕后到底