问题:
有可能,因为LinkedList可能是一个双向链表(否则它无法实现Deque接口)。并且附加双向链表是0(1)操作。
addAll
方法不会在固定时间内运行。
问题:
这也可能是因为LinkedHashSet
“维护了一个贯穿其所有条目的双向链表”。
答案 0 :(得分:6)
您需要实现自己的类。 LinkedList
类不公开其内部节点结构,因此您不能将其最后一个节点指向另一个LinkedList
的第一个节点。
LinkedHashSet
的答案类似:虽然它确实维护了这个双向链接列表,但您无法访问它。
答案 1 :(得分:6)
你的假设是基于没有封装 - 即LinkedHashSet
愿意将其内部LinkedList
暴露给外界,当我怀疑它不是。
同样加入两个链接列表 - 我不知道每个节点是否知道它所在的列表,但这肯定会破坏你的固定时间附加。即使他们不这样做,只要你将一个列表的头部连接到另一个列表的尾部,你就会遇到问题 - 你有两个列表都指向相同的数据,这会产生一些奇怪的后果。
换句话说,这两种操作在计算机科学意义上都是可行的,你可以构建你的自己的实现来支持它们,但这并不意味着Java API暴露了它的内部结构。一种支持这些操作的方法。
答案 2 :(得分:1)
你无法访问它,但我怀疑Collections确实如此,所以你不应该放弃希望这是一个可行且快速解决问题的方法。
我看得更远,你说得对。如果你有Set<Whatever> whatever = SOME CONSTRUCTOR
,那么你可以编码List<Whatever> list = new LinkedList(whatever);
,因为LinkedList有一个Collections构造函数,而Set有一个Collections接口。