Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在通用列表中公开下一个/上一个指针_Java_Generics - Fatal编程技术网

Java 在通用列表中公开下一个/上一个指针

Java 在通用列表中公开下一个/上一个指针,java,generics,Java,Generics,我希望有一个通用的双链接列表,当我创建一个列表时(其中point有getX()&getY()),它现在也有getPrev()和getNext(),其中prev/next是列表中的上一个/下一个对象 如果我编写自己的列表代码(我确实不想做),那么这是一件轻而易举的事。有没有办法用泛型或其他库来实现这一点?基本上,我可以将上一个/下一个指针推送到我的对象上,而不是有一个指向我的点和上一个/下一个指针的不可见容器对象吗 谢谢-dave已经是一个双链接列表了LinkedList.listIterator

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

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


谢谢-dave已经是一个双链接列表了
LinkedList.listIterator(int)
返回一个
listIterator
对象,该对象公开了方法
next()
previous()

我认为您不能使用java.util.LinkedList

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


您不能使用LinkedList(在is a或has关系中)实现getNext和getPrev方法,并使这些方法以恒定时间运行。由于实体类在
LinkedList
中是私有的,因此指向列表头的指针也是私有的。您可以在O(n)中这样做
getNext(get(cursor++)因为获取需要O(n)个时间。有很多方法可以做到这一点(refletion),但最好只编写自己的链表实现,或者使用
ListIterator

,除非可以从公共基类继承,或者让所有类重新实现公共接口的getNext()/getPrev()函数,这是可以接受的解决方案吗?有什么具体的原因不想使用自己的解决方案吗?@不,我认为这就是它的工作原理-模板化类必须实现一个包含previous()和next()的接口。有这样的类吗?@turbo-我更喜欢现有的库,因为它会非常坚固和快速(如果它在运行时的某个地方)。这为我节省了编码时间。这是有道理的,只是好奇。
LinkedList
没有
getNext
/
getPrev
方法,所以它只跟踪头部这一事实不是问题。与
LinkedList
相关的唯一面向公众的next/prev来自
ListIterator
接口,该接口已正确实现(在
LinkedList
ListIter
的私有内部类中)。我知道它没有getNext、getPrev,也不应该有。这就是ListIterator的用途。如果您了解迭代器的用途和用法,那么我不明白您为什么要说next/prev是O(N)操作。您链接到的源代码显示了这两种方法的
ListIter
,都使用了O(1)操作。编辑效果肯定更好。我仍然不明白为什么你要用
LinkedList
在O(N)时间内实现next/prev,而它们已经在列表的迭代器中在O(1)时间内实现了;不管怎样,OP显然对列表中的元素感兴趣,这些元素有next/prev,而不是列表本身,这意味着他需要进行大量反思,或者滚动自己的类。是的,你是对的,我认为OP想要在列表中实现next-prev,而不是元素。关于O(N)如果你想在
LinkedList
类中添加方法
next
prev
,你可以这样做,那是个坏主意。当我查看源代码时,我想看看列表的头是否受
保护
且可被子对象访问。问题是列表对象暴露了next和previous。我希望列表中包含的对象能够提供下一个和上一个方法。@DavidThielen,在这种情况下,如果不使用一些反射诡计来访问私有类
LinkedList.Entry
,您唯一的选择就是使用自己的方法。