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/