java - 需要澄清 Oracle 教程解释何时使用迭代器与 for-each 结构

标签 java collections iterator

关于集合的 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-Each 的副本 和 Iterator vs for 因为他们问的是迭代器和for-each的一般比较,我问的是oracle教程中的具体句子。

最佳答案

假设您有两个集合:

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

...并且您需要并行遍历它们(即,处理每个中的第一个条目,然后处理每个中的下一个条目,等等)您不能使用增强的 for 循环,您将使用 Iterator:

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 的主题,其余的必须是 Iterator

关于java - 需要澄清 Oracle 教程解释何时使用迭代器与 for-each 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182103/

相关文章:

c# - 使用 linq 解析样式属性集合

c++ - 与指针一起使用时未声明“开始”

java - 访问 actionPerformed 中的变量

java - Android Studio : How do I install Socrata's Soda 2. 0 Java API

java - 有没有一种优雅的方法来打开包裹在 2 个嵌套的 Optionals 中的对象?

iterator - 如何在 Rust 中为特定集合类型(list/set/map)创建一个空迭代器?

python - 为什么我不能对相同的数据进行两次迭代?

java - SQL注入(inject): want to show a demo of sql injection

java - 按值的字母顺序排列 HashMap

apache-spark - 插入 map 时不支持的操作异常