公开通用列表中的next / prev指针

时间:2013-12-11 20:56:05

标签: java generics

我希望有一个通用的双向链表,当我创建一个List(其中point有getX()& getY())时,它现在也有getPrev()和getNext(),其中prev / next是列表中的上一个/下一个对象。

如果我编写自己的列表代码(我想要这样做),这是一件小事。有没有办法用泛型或其他库来做到这一点?基本上,我可以将那个prev / next指针推送到我的对象,而不是有一个不可见的容器对象指向我的点以及prev / next指针吗?

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:2)

java.util.LinkedList<E>已经是一个双重链接列表。 LinkedList.listIterator(int)会返回ListIterator<E>个对象,该对象会公开方法next()previous()等。

答案 1 :(得分:0)

我认为你不能用java.util.LinkedList

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/LinkedList.java#LinkedList

看看第95行。该类只跟踪列表的头部,因此每次调用getNext和getPrev将始终在O(N)时间运行,而不是O(1)

您不能使用LinkedList(在一个或有一个关系中)来实现getNext和getPrev方法,并让这些方法在恒定时间内运行。由于实体类在LinkedList中是私有的,因此指向列表头部的指针也是如此。您可以在O(n)中执行此操作getNext(get(cursor++));,因为获取需要O(n)时间。有一些方法可以做到(refletion)但你最好只编写自己的链表实现或与ListIterator一起使用。