Java 什么时候实现迭代器而不是Iterable有用?

Java 什么时候实现迭代器而不是Iterable有用?,java,iterator,Java,Iterator,什么时候实现迭代器而不实现iterable有用 或者说,实现迭代器只是实现iterable的副产品吗?这两者是相关的,但并不相同 列表是可编辑的——您可以获得它的迭代器。它不是一个迭代器 Iterator是一个单用类,可以使用hasNext和next方法沿着对象的集合进行迭代 Iterable是一个Collection类,当调用Iterator()方法时,该类返回一个Iterator实例 我甚至可以说,我看到no的情况是Iterable应该实现迭代器。由于迭代器是一次性使用的,我看不到迭代器应该

什么时候实现迭代器而不实现iterable有用


或者说,实现迭代器只是实现iterable的副产品吗?

这两者是相关的,但并不相同

列表
可编辑的
——您可以获得它的
迭代器
。它不是一个迭代器

Iterator
是一个单用类,可以使用
hasNext
next
方法沿着对象的
集合进行迭代

Iterable
是一个
Collection
类,当调用
Iterator()
方法时,该类返回一个
Iterator
实例


我甚至可以说,我看到no的情况是
Iterable
应该
实现迭代器。由于
迭代器
是一次性使用的,我看不到
迭代器
应该
实现Iterable

的情况,它们在语义和用例上非常相似,但在实现上有所不同。Iterable是一个简单的迭代器工厂,可以在for循环中使用。因此,实现Iterable可能更方便

for(String s : getIterable()){
    ...
}
与:

Iterator<String> it = getIterator();

while(it.hasNext()){
    String s = it.next();
    ...
}
Iterator it=getIterator();
while(it.hasNext()){
字符串s=it.next();
...
}

但是,在某些情况下,迭代器可能不会被重新实例化,即当您运行db请求结果时,因此在这种情况下,如果不重新发送请求,您就无法使迭代器变得可用。

一般来说,您可以实现Iterable或迭代器,以对迭代集合的代码隐藏集合的实现。任何一个都可以很好地工作。不同之处在于可以遍历集合的次数。迭代器只能遍历集合一次,而Iterable可以遍历集合多次。您可以通过向Iterable请求迭代器来遍历它,您可以多次这样做。

列表
具有扩展了
迭代器的
列表迭代器
。那么为什么“它不是一个
迭代器”
?列表实现了iterable,并且具有迭代器correct的内部实现?我想知道迭代器的一个实现是否没有iterable实现。@ferrerverck
List
返回一个
iterator
,因为它是
iterable
。它当然不是
迭代器
——这是
列表迭代器在数据库
结果集
上的工作。这是一个
迭代器
模式,但它没有
Iterable
,它是查询的结果。很抱歉,我无法理解。从官方文档:
公共接口列表迭代器扩展迭代器
。为什么ListIterator不是一个迭代器?那么您知道一个例子吗?我希望一个类在没有iterable的情况下实现迭代器?如中所示,什么时候才有必要/更有用只横切一次集合?+1。重复性或缺乏重复性是重要的区别。考虑从网络连接中读取行。这是一个完全合理的迭代器,但使其可移植是行不通的。如果调用方再次调用迭代器(),会发生什么情况?