【发布时间】:2017-07-29 07:40:04
【问题描述】:
在文档中,声明
与 HashSet 一样,[LinkedHashSet] 为基本操作(添加、包含和 删除)提供恒定时间性能,假设哈希函数在桶中正确地分散元素。
我了解 HashSet 如何为 remove(Object obj) 提供恒定时间性能,但由于 LinkedHashSet 也需要维护一个链表,并且删除特定元素涉及遍历列表,所以在我看来 remove(对象 obj) 应该花费线性时间。我错过了什么吗?
我能想到的唯一解释是哈希表中的每个条目(由LinkedHashSet维护)都包含对链表中相应节点的引用,因此在链表中定位节点需要恒定的时间。但我不确定它是否真的是实现......
谢谢!
【问题讨论】:
-
删除您已经通过其哈希码定位的特定元素是 O(1)。只需调整两个链接。哈希表中的每一项都是链表中对应的节点。
-
“删除特定元素涉及遍历列表” - 不,因为哈希表条目将您直接指向所需的链表节点。
标签: java algorithm collections