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