Java LinkedHashSet remove(Object obj) 方法常量/线性时间复杂度?

4 java algorithm collections

在文档中,指出

与 HashSet 一样,[LinkedHashSet] 为基本操作(添加、包含和删除)提供恒定时间性能,假设哈希函数将元素正确地分散在存储桶中。

我理解HashSet如何为remove(Object obj)提供恒定时间性能,但由于LinkedHashSet也需要维护一个链表,并且删除特定元素涉及遍历列表,那么在我看来remove(Object obj)应该花费线性时间。我错过了什么吗?

我能想到的唯一解释是哈希表(由LinkedHashSet维护)中的每个条目都包含对链表中相应节点的引用,因此需要恒定的时间来定位链表中的节点。但我不确定这是否真的是实施......

谢谢!

Hul*_*ulk 5

LinkedHashSet除了哈希表之外,还维护节点之间的链接。删除时不需要遍历整个列表,只需要更新列表邻居。访问特定元素并不比访问HashSet.