首页 > 解决方案 > 需要澄清 Oracle 教程解释何时使用迭代器与 for-each 构造

问题描述

在关于集合的 Oracle 教程https://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html 我看到以下内容:

Use Iterator instead of the for-each construct when you need to:

1. Remove the current element. The for-each construct hides the iterator, so you cannot call remove. Therefore, the for-each construct is not usable for filtering.
2. Iterate over multiple collections in parallel.

我了解迭代器支持的第一个选项“删除当前元素”,而 for-each 构造不支持。我需要澄清第二个选项“并行迭代多个集合”,这可以通过迭代器而不是 for-each 来完成。有人可以提供这种情况的例子吗?据我了解,for-each 也可以嵌套,因此可以并行处理多个集合。

这不是Iterator vs For-EachIterator vs for的重复, 因为他们询问了迭代器和 for-each 的一般比较,我询问了 oracle 教程中的具体句子。

标签: javacollectionsiterator

解决方案


假设您有两个集合:

List<A> listA = /*...*/;
List<B> listB = /*...*/;

...并且您需要并行遍历它们(即处理每个条目中的第一个条目,然后处理每个条目中的下一个条目,等等。)您不能使用增强for循环来做到这一点,您可以使用Iterators :

Iterator<A> itA = listA.iterator();
Iterator<B> itB = listB.iterator();
while (itA.hasNext() && itB.hasNext()) {
    A nextA = itA.next();
    B nextB = itB.next();
    // ...do something with them...
}

公平地说,您可以将增强for循环与迭代器结合起来:

Iterator<A> itA = listA.iterator();
for (B nextB : listB) {
    if (!itA.hasNext()) {
        break;
    }
    A nextA = itA.next();
    // ...do something with them...
}

...但它很笨拙,清晰度也受到影响,只有一个集合可以成为 的主题for,其余的必须是Iterators。


推荐阅读