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

Hou*_*eng 2 java algorithm

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

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

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

And*_*ter 7

是否有任何树或堆支持以log-N速度插入,删除和查找?

是的,基于红黑树的TreeMap保证:

类TreeMap <K,V>

...

此实现为containsKey,get,put和remove操作提供有保证的log(n)时间成本.算法是Cormen,Leiserson和Rivest的算法导论中的算法的改编.

也可以看看

顺便说一句,你说TreeSet,删除速度很慢 - 但是,JavaDoc也会O(log(n))删除文件:

类TreeSet <E>

...

此实现为基本操作(添加,删除和包含)提供了有保证的log(n)时间成本.