问题描述
如何从LinkedList获取对实际节点(入口)对象的引用-不是其拥有的值?
像这样的东西:
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<String> test = new LinkedList<String>();
test.addLast("first");
test.addLast("second");
test.addLast("third");
var thirdNodeReference = test.getLastNode(); // Does this even exist ?
test.addLast("fourth");
var secondNodeReference = thirdNodeReference.previous(); // To perform such operations.
}
}
java LinkedList中是否存在像LinkedList.getLastNode()
这样的方法,以便可以对其执行previous()
或next()
操作?
我知道LinkedList.listIterator()
存在,但没有用,因为我将拥有对每个Node(条目)的引用,并且我需要使用它们-例如上面代码中的lastNodeReference
。
如果JAVA标准库中不存在这样的功能,那么我可以使用任何第三方(外部)库吗?
原因:
我需要访问节点才能在remove()
中执行O(1)
操作。
在实际的JAVA code implementation中,它通过遍历列表以对路径上的每个节点执行O(N)
来查找包含给定对象的Node,从而在equals()
中执行此操作。另外,请检查此comment。
如果我们直接引用Node对象,那么可以理想地在O(1)
中执行此操作-因为remove()
仅需要更改previous
和next
Node的2个指针。>
解决方法
所以不,您无法获得带有链表的上一个元素。 您可能想实现一个双向链接列表,tho(示例代码可以在Google上很容易找到)
, LinkedList上有一个descendingIterator方法,描述为Returns an iterator over the elements in this deque in reverse sequential order
,虽然(完全)不清楚OP需要什么,但Iterator确实具有.next,.previous和。删除方法。