JDK中是否有可以在log-N时间内删除,查找和插入的数据结构?

时间:2014-11-07 06:18:59

标签: java algorithm

在对RDring进行测试后,我发现删除元素有时失败了 删除计时器的时间复杂度是线性的;警报管理器使用TreeSet 迭代所有要删除的元素。

然后,我查看PriorityQueue的来源并猜测可能会用它来存储计时器 名单。但我很惊讶,虽然在PriorityQueue中删除了 恒定时间,在优先级队列中插入元素也是线性的。 他们没有使用任何树或二进制搜索技术来加速 插入

如果我想快速删除,那么PQ但插入速度慢。否则我可以使用TreeSet 在log-N中插入但删除速度慢。是否有支持的树或堆 以log-N速度插入,删除和查找?

1 个答案:

答案 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)时间成本(添加,删除和包含)。