我希望有一个通用的双向链表,当我创建一个List(其中point有getX()& getY())时,它现在也有getPrev()和getNext(),其中prev / next是列表中的上一个/下一个对象。
如果我编写自己的列表代码(我不想要这样做),这是一件小事。有没有办法用泛型或其他库来做到这一点?基本上,我可以将那个prev / next指针推送到我的对象,而不是有一个不可见的容器对象指向我的点以及prev / next指针吗?
谢谢 - 戴夫
答案 0 :(得分:2)
java.util.LinkedList<E>已经是一个双重链接列表。 LinkedList.listIterator(int)
会返回ListIterator<E>
个对象,该对象会公开方法next()
和previous()
等。
答案 1 :(得分:0)
我认为你不能用java.util.LinkedList
看看第95行。该类只跟踪列表的头部,因此每次调用getNext和getPrev将始终在O(N)时间运行,而不是O(1)
您不能使用LinkedList(在一个或有一个关系中)来实现getNext和getPrev方法,并让这些方法在恒定时间内运行。由于实体类在LinkedList
中是私有的,因此指向列表头部的指针也是如此。您可以在O(n)中执行此操作getNext(get(cursor++));
,因为获取需要O(n)时间。有一些方法可以做到(refletion)但你最好只编写自己的链表实现或与ListIterator
一起使用。