为什么Iterator界面没有扩展Iterable?
该iterator()方法可以简单地返回this.
它是故意还是只是对Java设计师的监督?
能够使用像这样的迭代器的for-each循环会很方便:
for(Object o : someContainer.listSomeObjects()) {
....
}
Run Code Online (Sandbox Code Playgroud)
where listSomeObjects()返回一个迭代器.
我读了为什么Java的迭代器不是Iterable?而为什么不枚举可迭代?,但我仍然不明白为什么这样:
void foo(Iterator<X> it) {
for (X x : it) {
bar(x);
baz(x);
}
}
Run Code Online (Sandbox Code Playgroud)
没有成功.换句话说,除非我遗漏了某些东西,否则上面可能是一个很好的有效语法糖:
void foo(Iterator<X> it) {
for (X x; it.hasNext();) {
x = it.next();
bar(x);
baz(x);
}
}
Run Code Online (Sandbox Code Playgroud) 如果你所做的只是一次简单的一次迭代(即只有,hasNext()而且next()没有remove()),你能保证线性时间性能和/或每次操作的摊销不变成本吗?
这是在Iterator合同中指定的吗?
是否存在Collection无法在线性时间内迭代的数据结构/ Java ?
java.util.Scanner implements Iterator<String>.A Scanner几乎不是数据结构(例如remove(),完全没有意义).这被认为是设计上的错误吗?
是否PrimeGenerator implements Iterator<Integer>被视为糟糕的设计,或者这究竟Iterator是为了什么?(hasNext()总是返回true,next()按需计算下一个数字,remove()没有意义).
同样,它有意义java.util.Random implements Iterator<Double>吗?
如果一个类型实际上Iterator只使用其三分之一的API,那么它应该真正实现吗?(即不remove(),总是hasNext())