如何在不实现iterable的情况下实现迭代器会有用吗?
或者实现迭代器只是实现iterable的副产品?
答案 0 :(得分:4)
这两者有关但不一样。
List
为Iterable
- 您可以获得Iterator
。它是不 Iterator
。
Iterator
是一个使用类,可以使用Collection
和hasNext
方法在next
个对象上进行迭代。
Iterable
是一个Collection
类,在调用Iterator
方法时会返回iterator()
个实例。
我甚至会说我看到没有的情况Iterable
implements Iterator
应该Iterator
。由于Iterator
是一次性使用,我无法看到implements Iterable
{{1}}应该{{1}}的情况。
答案 1 :(得分:1)
一般来说,您可以实现Iterable或Iterator来隐藏从集合中迭代的代码的集合实现。任何一个都会运作良好。不同之处在于可以遍历集合的次数。迭代器只能遍历集合一次,而Iterable可以遍历集合多次。您可以通过询问迭代器来遍历Iterable,您可以多次执行此操作。
答案 2 :(得分:0)
它们在语义和用例方面非常相似,但在实现方面有所不同。 Iterable是一个简单的Iterators工厂,可以在for循环中使用。因此,实现Iterable可能更方便。
for(String s : getIterable()){
...
}
对战:
Iterator<String> it = getIterator();
while(it.hasNext()){
String s = it.next();
...
}
但是,在某些情况下,Iterator可能无法重新实例化,即当您运行db请求结果时,因此在这种情况下,如果不重新发送请求,则无法使其成为Iterable。