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

时间:2017-07-29 07:40:05

标签: java algorithm collections

在文档中,声明

  

与HashSet类似,[LinkedHashSet]为基本操作(add,contains和 remove )提供恒定时间性能,假设散列函数在桶之间正确地分散元素。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

除了哈希表之外,

LinkedHashSet还维护节点之间的链接。没有必要遍历整个列表以进行删除,只需要更新列表邻居。访问特定元素并不比HashSet更昂贵。