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