为什么java.util.Collection不直接定义next(),hasNext()?

时间:2010-09-02 02:20:56

标签: java collections iterator

如果 Collection 定义 hasNext()而不是 iterator()。hasNext(),我们可以更容易地编写循环:

while(collection.hasNext()){…}

而不是:

Iterator it= collection.iterator();
While(it.hasNext()){…}

当然,我知道循环for(E e:collection)的简单方法存在。

为什么存在接口迭代器?

4 个答案:

答案 0 :(得分:9)

因为您可以同时为同一个Iterator对象提供多个有效Collection个对象。

这可能很有用。如果Collection定义了nexthasNext方法,则会排除此方法。

答案 1 :(得分:7)

那不是线程安全。该集合只能维持一个“当前位置”,因此您无法在两个不同的线程中同时迭代它。

拥有迭代器允许多个同时迭代的线程不会踩到彼此的脚趾。

答案 2 :(得分:3)

我理解从集合中考虑迭代器的理由是,它们可以有很多(除了简单地向前移动集合)。您可以创建自己的迭代器以反向执行或执行类似迭代访问所有节点的DOM图形。

答案 3 :(得分:2)

主要原因是集合必须具有迭代“状态”。您无法同时支持多次迭代。 PHP数组有类似内置迭代状态的东西,它让我很困惑。