在对RDring进行测试后,我发现删除元素有时失败了 删除计时器的时间复杂度是线性的;警报管理器使用TreeSet 迭代所有要删除的元素。
然后,我查看PriorityQueue的来源并猜测可能会用它来存储计时器 名单。但我很惊讶,虽然在PriorityQueue中删除了 恒定时间,在优先级队列中插入元素也是线性的。 他们没有使用任何树或二进制搜索技术来加速 插入
如果我想快速删除,那么PQ但插入速度慢。否则我可以使用TreeSet 在log-N中插入但删除速度慢。是否有支持的树或堆 以log-N速度插入,删除和查找?
答案 0 :(得分:7)
是否有任何树或堆支持以log-N速度插入,删除和查找?
是的,基于红黑树的TreeMap保证:
类TreeMap< K,V>
...
此实施为containsKey, get,put和remove 操作提供有保证的 log(n)时间成本。算法是对Cormen,Leiserson和Rivest的算法导论的改编。
另见
顺便说一句,你说TreeSet
,删除速度很慢 - 但是,JavaDoc也会删除文档O(log(n))
:
类树集< E>
...
此实施为基本操作提供了有保证的 log(n)时间成本(添加,删除和包含)。