是否存在以下的Java数据结构:
所以对于包含max n个元素的列表,如果添加了一个新元素并且属于top n,那么排除最低排名的元素并执行重新排序
性能特征是什么?
通过使用底层数组制作自定义解决方案可以获得更好的解决方案吗?
答案 0 :(得分:3)
您应该考虑使用TreeSet。数据以有序的方式自动添加到那里。
答案 1 :(得分:1)
您可以使用TreeSet
快速实现此功能,treeSet.pollFirst()
是一种始终自动保持排序的数据结构。
要驱逐最低成员,只要treeSet.size()
大于预定义的最大值,就拨打<div style="max-height:50px;height:50px; overflow:auto">
。
至于性能,TreeSet在O(log(n))时间内添加和删除run。在支持添加和删除的同时使用数组维护sort-ness将会慢得多。
答案 2 :(得分:0)
您还可以使用PriorityQueue实施。
通过选中size();
之后,您可以使用peek()检查是否必须添加元素,如果要添加,则删除最低元素,然后添加新元素。 poll(),remove()方法的o(log(n))时间和peek()和size()的常量时间