Java 如何实现自定义双链表实现的迭代器?

Java 如何实现自定义双链表实现的迭代器?,java,Java,我正在用Java实现一个自定义的双链表,但我不知道如何为它实现迭代器,以便可以使用foreach(增强的for)循环轻松地对它进行迭代 我基本上希望能够使用下面的代码获取下一个或上一个元素,从给定节点开始,然后继续获取Node变量中的“next”(或“previous”)元素。我希望它在“next”为null时停止(这显然将由“hasNext”处理)。 我知道,从Java的角度来看,下面的方法可能没有严格意义,因为我搜索的是一个for循环,它不在集合中循环,但在逻辑上是有意义的 for (Nod

我正在用Java实现一个自定义的双链表,但我不知道如何为它实现迭代器,以便可以使用foreach(增强的for)循环轻松地对它进行迭代

我基本上希望能够使用下面的代码获取下一个或上一个元素,从给定节点开始,然后继续获取Node变量中的“next”(或“previous”)元素。我希望它在“next”为null时停止(这显然将由“hasNext”处理)。 我知道,从Java的角度来看,下面的方法可能没有严格意义,因为我搜索的是一个for循环,它不在集合中循环,但在逻辑上是有意义的

for (Node node : firstNode)
否则我需要做一些类似的事情

Node node = getFirstNode();
while (node != null) {
   //do stuff with current node
   node = node.next;
}
我不想使用java.util.LinkedList的原因是自定义方法使用的内存量较低。基本上,我还需要节点中的“下一个”和“上一个”引用,这样我就可以轻松地访问它们,而只需将节点放在手边。如果我对每个节点使用java.util.LinkedList方法,我还需要保留一个整数索引,以指示对象位于列表中的哪个索引,然后能够在O(1)时间内访问“下一个”或“上一个”或编辑该位置的列表


请注意,如果有一种不需要节点本身中的indexInList变量的方法,我仍然更喜欢java.util.LinkedList方法

这里是一个非常基本的
迭代器
的实现,用于只使用
下一个
指针向前迭代的链表:

class NodeIterator implements Iterator<Node> {
    Node current;

    public NodeIterator(Node firstInList) {
        this.current = firstInList;
    }

    @Override
    public boolean hasNext() {
        return current != null;
    }

    @Override
    public Node next() {
        Node savedCurrent = current;
        current = current.next;
        return savedCurrent;
    }
}
作为参考,节点类:

class Node {
    Node next;
   // add other fields you need
}

你需要这个
indexInList
变量做什么?@Joni因为我还想通过查看节点本身(而不是在实际的java.util.LinkedList中找到它,然后查看“previous”或“next”)来获取“previous”和“next”对象。我想避免进行搜索。为什么不实现listIterator接口?然后,您可以进行下一个/上一个自定义。然后,如果您实现了iterable,您将能够使用foreach。您知道即使有索引,您仍然需要搜索,对吗?没有链接列表的O(1)元素访问,这让您觉得可以节省很多内存?
class Node {
    Node next;
   // add other fields you need
}