【问题标题】:How are Iterators implemented in Java?Java 中的迭代器是如何实现的?
【发布时间】:2010-02-01 05:04:17
【问题描述】:

在集合上打开的迭代器实例是否将整个集合保存在内存中并访问每次调用 next() 时递增的位置?还是我错过了什么?

【问题讨论】:

标签: java iterator


【解决方案1】:

Iterator 的实现取决于它正在迭代的特定Collection。如果您查看 JDK 源代码,例如 ArrayListLinkedList 使用不同的迭代器。

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

一般来说,迭代器将(取决于实现)存储对集合的引用和某种索引来标记它们的位置。

【讨论】:

    【解决方案2】:

    完全取决于实现,但一般来说(对于为内存中集合构建的迭代器),迭代器将具有对底层集合的引用,所以是的,它将保留在内存中。

    请注意,此引用很可能不是副本,这就是迭代器检查对其创建所在的集合的并发修改的原因。

    【讨论】:

      【解决方案3】:

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

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

      它是如何做到这一点的,这决定了哪些数据是即时可用的:

      • 它可以从文件、数据库、库或其他任何地方获取每个元素。
      • 它可以从已经在内存中的对象中获取每个元素。
      • 等等

      在情况 1 中,将所有内容保存在内存中可能没有用,但在情况 2 中,我们已经在内存中拥有所有内容,我们可以(并且将)确实查询该对象下一个位置的项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 2017-11-25
        • 1970-01-01
        • 2011-02-26
        • 2016-01-23
        • 1970-01-01
        • 2016-06-15
        相关资源
        最近更新 更多