Iterable<E>
在java.lang
而Iterator<E>
在java.util
。这是否有充分的理由,或者这仅仅是糟糕设计的产物?
这似乎很奇怪,因为唯一有用的Iterable<E>
是提供一个Iterator<E>
.
编辑:一个潜在的原因是因为(当时)新引入的 for-each 循环。我想我的问题是,它们是等价的吗?
for(Object o : collection)
...
vs
for( Iterator iter = collection.iterator(); iter.hasNext(); ) {
o = iter.next();
...
如果它们是,那么这仍然不能解释为什么这两个类在不同的包中,因为编译器无论如何都必须导入java.util
才能使用该Iterator
构造。