java - 使用迭代器有什么好处?

标签 java loops

for(Element e : elementList)

for (Iterator<Element> itr = elementList.iterator(); itr.hasNext();)

第一个要简单得多。我想做第二个有什么优势或理由吗?

最佳答案

两者内部都使用迭代器,唯一的区别是使用增强的 for 循环时代码更清晰、更短。以下是 javadoc 对两者的描述:

迭代集合比它需要的更丑陋。考虑以下方法,该方法获取计时器任务的集合并取消它们:

void cancelAll(Collection<TimerTask> c) {
    for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
        i.next().cancel();
}

迭代器只是困惑。此外,这也是犯错误的机会。迭代器变量在每个循环中出现三次:这是出错的两次机会。 for-each 结构消除了困惑和出错的机会。以下是使用 for-each 构造的示例的外观:

void cancelAll(Collection<TimerTask> c) {
    for (TimerTask t : c)
        t.cancel();
}

当您看到冒号 (:) 时,请将其读作“in”。上面的循环读作“对于 c 中的每个 TimerTask t”。正如您所看到的,for-each 结构与泛型完美地结合在一起。它保留了所有的类型安全性,同时消除了剩余的困惑。因为您不必声明迭代器,所以不必为它提供通用声明。 (编译器在背后为您完成此操作,但您无需关心它。)

有关为什么我们应该使用 for-each 循环而不是迭代器的完整说明,请阅读以下内容:

http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

关于java - 使用迭代器有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952313/

相关文章:

java - 如何处理int和Integer之间的数组元素

java - 将字符串中的一系列数字转换为不同的数字

r - 用于查找每场比赛总和的矢量化替代方案

java - 需要帮助将用户输入分配到递增的字符串数组中

java - 无法在 Mac OS X Yosemite (10.10) 上运行 java 桌面应用程序

Java Web Start 在 java 版本 7u45 (NPE) 之后不起作用

Java 8 功能接口(interface)默认和静态方法返回类型与功能接口(interface)名称相同吗?

PHP:每50个项目的循环函数

r - 根据 R 中的列表长度动态创建嵌套的 FOR 循环

python - 如何根据同一数据框中具有特定条件的另一记录更新一条记录的值