java - Java Iterator 是否持有对链表元素的引用?

标签 java pointers object iterator

我需要一个列表来保存应用程序中 Enemy 类的几个元素。这将用作对象池以提高效率,因为这个特定的类否则会经常被实例化和终止。

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

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

我已经对此做了一些研究,但我还没有找到答案。

最佳答案

它没有记录在 Javadoc 中,但您可以检查 LinkedListlistIterator 的实现,并看到它确实持有对当前和下一个元素的引用 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;
    ....

它只需要在创建 ListIterator 时遍历 LinkedList(从开始或结束),因为您可以请求 ListIterator 指向一个List构造时的具体索引。

关于java - Java Iterator 是否持有对链表元素的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31727250/

相关文章:

php - php中如何将对象转换为数组的数组?

javascript - 如何迭代数组中的值以匹配对象中的值并返回相应的对象?

java - 用java解析xml

java - 如何限制选中的复选框?

java - 未找到 JSP 2 标记文件 “/WEB-INF/tags”

任何人都可以向我解释这个意外的点输出吗?

android - 我如何在Singleton中使用上下文?

java - 为什么 hibernate 状态不创建这个我的表?

c++ - 函数指针(类内)

c++ - cin.getline 在 for 循环中搞砸了