Java Iterator是否保留对链表元素的引用?

Sup*_*ker 5 java pointers iterator object

我需要一个列表来在应用程序中保存Enemy类的几个元素.这将作为一个对象池来提高效率,因为这个特定的类本来会被实例化并经常被杀掉.

到目前为止,我可能会使用链表,因为将非活动元素放到列表末尾非常有用.我的问题如下 - 在Java中,Iterator是否通过保持对它的引用(对于链表)提供对它正在访问的当前元素的直接访问,或者迭代到下一个元素需要迭代器从头开始循环(即不能提高效率,比如一个for循环,它总是需要回到链接列表的开头)?

从C的角度来看,我的问题是Iterator是否包含指向它正在访问的当前元素的指针,这样它就不必从头开始循环获取访问权限.

我对此做了一些研究,但我找不到答案.

Era*_*ran 6

它没有在Javadoc中记录,但你可以检查LinkedList's 的实现,listIterator看看它确实包含对List的当前和下一个元素的引用:

public ListIterator<E> listIterator(int index) {
    return new ListItr(index);
}

private class ListItr implements ListIterator<E> {
    private Entry<E> lastReturned = header;
    private Entry<E> next;
    private int nextIndex;
    private int expectedModCount = modCount;
    ....
Run Code Online (Sandbox Code Playgroud)

它只需要在创建时迭代LinkedList(从开头或结尾)ListIterator,因为您可以在ListIterator构造时请求指向List的特定索引.