Java 什么时候实现迭代器而不是Iterable有用?
什么时候实现迭代器而不实现iterable有用Java 什么时候实现迭代器而不是Iterable有用?,java,iterator,Java,Iterator,什么时候实现迭代器而不实现iterable有用 或者说,实现迭代器只是实现iterable的副产品吗?这两者是相关的,但并不相同 列表是可编辑的——您可以获得它的迭代器。它不是一个迭代器 Iterator是一个单用类,可以使用hasNext和next方法沿着对象的集合进行迭代 Iterable是一个Collection类,当调用Iterator()方法时,该类返回一个Iterator实例 我甚至可以说,我看到no的情况是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实现。@ferrerverckList
返回一个iterator
,因为它是iterable
。它当然不是迭代器
——这是列表迭代器在数据库结果集
上的工作。这是一个迭代器
模式,但它没有Iterable
,它是查询的结果。很抱歉,我无法理解。从官方文档:公共接口列表迭代器扩展迭代器
。为什么ListIterator不是一个迭代器?那么您知道一个例子吗?我希望一个类在没有iterable的情况下实现迭代器?如中所示,什么时候才有必要/更有用只横切一次集合?+1。重复性或缺乏重复性是重要的区别。考虑从网络连接中读取行。这是一个完全合理的迭代器,但使其可移植是行不通的。如果调用方再次调用迭代器(),会发生什么情况?