什么时候实现Iterator但不是Iterable有用吗?

时间:2013-12-08 14:51:03

标签: java iterator

如何在不实现iterable的情况下实现迭代器会有用吗?

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

3 个答案:

答案 0 :(得分:4)

这两者有关但不一样。

ListIterable - 您可以获得Iterator。它是 Iterator

Iterator是一个使用类,可以使用CollectionhasNext方法在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。