【问题标题】:Iterator vs For-Each迭代器与 For-Each
【发布时间】:2015-05-21 13:43:51
【问题描述】:

我知道这里有很多类似的问题。但这似乎以前没有讨论过。

总的来说,我想知道,如果没有元素被删除,为什么要在 For-Each 循环上使用迭代器?所以,基本上只是迭代Collection,唯一使用的修饰符是add

我知道如果从Collection 中删除元素,Iterator 是唯一的保存选项。 性能不是参数,因为For-Each 将被编译器转换为迭代器。 Iterator 更冗长,所以 +1 到 For-Each

在所描述的场景中使用 Iterator over For-Each 是否有任何可靠的点?

【问题讨论】:

  • 我想不出任何令人信服的理由,因为它们本质上是一样的。我只是觉得 for each 看起来更好,更容易阅读。
  • 我假设foreach,你的意思是for(Object o : yourCollection)?在这种情况下,您必须小心ConcurrentModificationException
  • @Tgsmith61591 “如果没有元素将被删除”
  • 如果您要添加到基础集合中,也可以获得ConcurrentModificationException
  • @yshavit,是的,但是在向基础集合添加元素时,两种方法都有助于避免ConcurrentModificationException

标签: java loops foreach iterator


【解决方案1】:

如果你需要使用Iterator 循环而不是foreach 循环

  • 您需要能够在处理过程中移除项目,或者
  • 您需要以不同于其他项目的方式处理最后一项。

此外,如果您希望能够根据前一个元素的特征跳过某个元素,Iterator 可能会更自然。

此外,对于Lists,ListIterator 循环有时可能比 foreach 循环更方便,因为它可以提供前一个和下一个元素的索引,并且(甚至除了索引之外)允许您识别迭代的第一个元素。此外,您需要ListIterator if

  • 您必须替换底层List 中的元素,或者
  • 您需要备份。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 2013-09-01
    • 2015-06-19
    • 2011-09-23
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多