如何通过引用对象或特定节点从java的LinkedList中有效地删除节点?使用remove(object)对整个列表使用遍历,如文档所示:"删除第一个元素e,使得(o == null?e == null:o.equals(e))&# 34 ;.我可以通过特定的节点引用删除吗?我不介意将对节点的引用存储在对象本身中。我不能使用列表的索引,因为它可能会改变。如果没有,是否有其他数据结构可以让我这样做?
答案 0 :(得分:2)
您可能想要使用HashSet
删除,插入通常是在常规时间内,如官方API所述:
此类为基本操作提供恒定的时间性能 (添加,删除,包含和大小),假设散列函数分散 桶中的元素
如果您决定使用HashSet
,请不要忘记覆盖对象中的equals
和hashcode
方法。
答案 1 :(得分:2)
尝试使用LinkedHashSet。它基本上是HashSet
,其元素具有确定性排序。或者,您可以将其视为由元素查找表支持的LinkedList
。
我相信remove(Object)
操作将是恒定时间。