我需要一个列表来保存应用程序中 Enemy 类的几个元素。这将用作对象池以提高效率,因为这个特定的类否则会经常被实例化和终止。
到目前为止,我可能会使用链表,因为将非 Activity 元素放在链表末尾会非常有益。我的问题如下 - 在 Java 中,迭代器是否通过持有对它的引用(对于链表)来提供对它正在访问的当前元素的直接访问,或者迭代到下一个元素是否需要迭代器再次从头开始循环(即无助于提高效率,就像 for 循环总是需要返回到链接列表的开头)?
从 C 的角度来看,我的问题是 Iterator 是否包含指向它正在访问的当前元素的指针,以便它不必从头开始循环以获得访问权限。
我已经对此做了一些研究,但我还没有找到答案。
最佳答案
它没有记录在 Javadoc 中,但您可以检查 LinkedList
的 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;
....
它只需要在创建 ListIterator
时遍历 LinkedList(从开始或结束),因为您可以请求 ListIterator
指向一个List构造时的具体索引。
关于java - Java Iterator 是否持有对链表元素的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31727250/