java - 需要澄清 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-Each 和Iterator vs for的重复, 因为他们询问了迭代器和 for-each 的一般比较,我询问了 oracle 教程中的具体句子。
解决方案
假设您有两个集合:
List<A> listA = /*...*/;
List<B> listB = /*...*/;
...并且您需要并行遍历它们(即处理每个条目中的第一个条目,然后处理每个条目中的下一个条目,等等。)您不能使用增强for
循环来做到这一点,您可以使用Iterator
s :
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
s。
推荐阅读
- c++ - CUDA 高效 nd-array(tensor) 切片
- python - 使用 python 从 HDF5 文件加载大型数据集
- android - Intent.putExtra(键,值)不起作用
- java - 将数据从片段传递到另一个片段。片段未附加到上下文
- javascript - 如何添加超过 1 个模态框?
- html - 如何让文本的两边对齐
- javascript - Meteor js,React 自定义图像重定向/meteor WebApp
- ios - 如何在 Swift 中删除部分的所有行
- java - 为什么 regex="" (一个空模式)在每个字符位置都匹配?
- java - 创建名为“loginRepository”的 bean 时出错:调用 init 方法失败;嵌套异常