Java 外部和内部迭代器展示了 Java 中外部和内部迭代器之间的区别。
迭代器是使程序员能够遍历列表和映射之类的容器的对象。
迭代器类型
迭代器有两种类型:外部和内部。 外部迭代器是主动的,内部迭代器是被动的。
当客户端(即程序员)控制迭代时,该迭代器称为外部迭代器。 当迭代器控制它时,它称为内部迭代器。
通常,建议使用内部迭代器而不是外部迭代器。 内部迭代不易出错,更易读,并且需要更少的代码。 另一方面,外部迭代器有时更灵活。 例如,在循环中对两个集合进行操作时。
Java 外部迭代器示例
以下示例显示了外部迭代器的用法。
JavaExternalIterationEx.java
在示例中,我们使用外部迭代器遍历单词列表,并以字符形式显示其元素及其大小。
这是输出。
ConcurrentModificationException
当我们使用带有增强型 for 循环的外部迭代并修改集合的元素时,我们可能会收到ConcurrentModificationException
。
JavaExternalIterationEx2.java
在该示例中,我们要从列表中删除所有等于“ sky”的单词。 这是出于演示目的; 从 Java 8 开始,我们可以轻松地使用removeIf()
方法删除元素:words.removeIf(e -> "sky".equals(e));
运行示例将导致ConcurrentModificationException
。
Java 工作中其他形式的外部迭代。
该示例可以在带有while
循环的老式迭代中正常运行。
它也可以与传统的 for 循环一起使用。
还要注意,在这种情况下,为每个循环使用并不会导致所有语言的错误。 例如,Python 3 或 Perl 6 可以正常工作。 另一方面,JavaScript 和 C++ 也会出错。
extit.py
这是 Python 3 中的等效代码。可以正常工作。
Java 内部迭代器示例
在以下示例中,我们使用内部迭代器。
JavaInternalIteratorEx.java
该示例遍历列表的所有元素,并打印它们及其大小。
JavaInternalIteratorEx2.java
使用现代功能性 Java,我们展示了如何创建一个不包含“天空”一词的新不可变列表。
This is the output.
在本教程中,我们讨论了 Java 的内部和外部迭代器。