我有一个包含一些特殊元素的元素列表,我需要在恒定时间内找到这些元素的邻居。使用双向链接列表,这听起来很容易:只需存储对包含这些特定元素的节点的引用,并检查其上一个和下一个节点。 (我也更喜欢使用链接列表,因为我会不断删除和添加元素。列表很大,性能尤为重要。)
但是,似乎Java的LinkedList不允许我存储包含元素的节点。那正确吗?如果是这样,是否有一种干净的方法可以做我需要做的事情?这应该不难,但是我没有找到解决方案。
这需要与不断变化的列表一起工作,我更喜欢不必在更改过程中进行任何更新(例如,如果我使用数组,则当它们在数组中移动时,我将不得不不断更新其索引)。此外,将来我可能需要从该特殊节点开始遍历列表,而又不浪费时间找到该节点(在链表的低级实现中这也很容易),因此我将更加感谢一个解决方案,也解决了这一问题。
编辑:感谢您的答案。不过,我当时希望的解决方案不涉及实现自己的链表版本。有一个吗?
最佳答案
我认为,实现自己的双向链接列表类是获得应用程序最佳性能的唯一方法。
标准列表实现通过使用抽象/信息隐藏来维护列表不变性而工作。结果,如果涉及多个线程,它们就可以“正确地工作”……对应用进行模化,从而在同步方面做正确的事情。
您想要(也许需要)深入研究抽象并获得实现细节,然后执行可能导致不变量被违反的操作。不支持。