2010-02-01 112 views
4

在集合上打开一个迭代器的实例是否将整个集合保存在内存中并访问每次调用next()时都会增加的位置?或者我错过了什么?如何在Java中实现迭代器?

+1

您可以随时查看源代码并找出:) – skaffman 2010-02-01 05:05:01

+0

关于源参考,请参阅JDK类ArrayList的代码:http://www.docjar.com/html/api/java/util/ArrayList.java .html 其中迭代器被实现为内部类 – sateesh 2010-02-01 06:03:15

回答

10

Iterator的实现依赖于特定的Collection是迭代。如果您查看JDK源代码,例如ArrayListLinkedList使用不同的迭代器。

还记得Iterator是一个接口不是一个具体的类,所以它只是指定一个契约而不是一个实现。

一般来说迭代器将(取决于实现)存储集合的引用和某种指数来标记他们在忙。

4

完全取决于执行,但一般(对于在内存中的集合构建的迭代器),迭代器将底层集合的引用,所以是的,它会保持在内存中。

请注意,此参考是最有可能不是复制,这就是为什么迭代器检查并发修改它们凡创建的集合。

0

完全取决于与Iterator相关的对象。记住(几乎)每个Iterator与我们迭代的Iterable有关。

每个Iterable类可以定义一个自己的Iterator类,根据请求返回next()元素。

如何它这样做deoends在其数据可瞬间:

  • 它可以从一个文件中的每个元素提取,从数据库,从图书馆或什么的。
  • 它可以从已经在内存中的对象获取每个元素。

在案例1中它不会可能是保存在内存中的一切有用的,但如果2,我们已经一切都在内存中,我们可以(会)确实在下一个位置查询有关该项目的对象。