2010-02-01 109 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,我們已經一切都在內存中,我們可以(會)確實在下一個位置查詢有關該項目的對象。