首页 > 解决方案 > 如何从 Java 中的 LinkedList 获取节点条目参考

问题描述

如何从 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.
    }

}

是否存在类似于LinkedList.getLastNode()java LinkedList 的方法,以便可以对其执行previous()next()操作?

我知道LinkedList.listIterator()存在,但这没有用,因为我将引用每个节点(条目),并且我需要使用它们 - 例如lastNodeReference在上面的代码中。

如果 JAVA 标准库中不存在这样的功能,我可以使用任何第三方(外部)库吗?

原因:

我需要访问节点以remove()O(1).

在实际的JAVA 代码实现O(N)中,它通过遍历列表来执行此操作,通过equals()在其路径上的每个节点上执行来查找包含给定对象的节点。另外,请检查此评论。如果我们直接引用 Node 对象,
这可以理想地执行- 因为只需要更改Node和Node.js 的 2 个指针。O(1)remove()previousnext

标签: javalinked-listjava-11doubly-linked-liststandard-library

解决方案


LinkedList 上有一个descendingIterator方法,它被描述为Returns an iterator over the elements in this deque in reverse sequential order,虽然它不(完全)清楚 OP 想要什么,但 Iterator 确实有一个 .next、.previous 和 .remove 方法。


推荐阅读