在集合上打开迭代器的实例是否将整个集合保留在内存中并访问每次调用next()时递增的位置?或者我错过了什么?
答案 0 :(得分:10)
Iterator
的实施取决于它正在迭代的特定Collection
。如果查看JDK源代码,例如ArrayList
和LinkedList
使用不同的迭代器。
记住Iterator
是一个接口而不是具体的类,所以它只是指定一个契约而不是一个实现。
一般来说,迭代器将(取决于实现)存储对集合的引用和某种索引以标记它们的位置。
答案 1 :(得分:4)
完全取决于实现,但总的来说(对于为内存中集合构造的迭代器),Iterator将引用底层集合,所以是的,它会将它保存在内存中。
请注意,此引用很可能不是副本,这就是迭代器检查对其创建的集合的并发修改的原因。
答案 2 :(得分:0)
这完全取决于与Iterator
相关的对象。记住(差不多)每个Iterator
与我们迭代的Iterable
相关。
每个Iterable
类都可以定义一个自己的Iterator
类,根据请求返回next()
元素。
如何这样做可以即时获取哪些数据:
在案例1中,将所有内容保存在内存中可能没什么用处,但是在案例2中,我们已经拥有内存中的所有内容,我们可以(并且会)确实查询关于下一个位置的项目的对象。