我有很多具有int优先级的元素。元素的优先级是可更改的。
行动计数getFirstPriorityElements(int count)
- n
操作计数updatePriorityOfElement(Object o, int priority)
- n
我应该使用什么样的最佳性能结构来获得具有最佳优先级的前X个元素?
答案 0 :(得分:1)
如果你想拥有一个恒定的优先级,那么PriorityQueue
或TreeSet
会适合你(如果你想要弹出元素,那就是队列,如果你想保留它们,那就是你的队列)。 / p>
但是,通过更改优先级,您必须在每次更改时重新排序集合。或者更好 - 在每次迭代之前。但这应该是同步的。
因此,创建一个使用自定义Comparator
的集合,并在每次调用iterator()
时重新定义其元素。例如,您可以扩展TreeSet
并覆盖iterator()
方法。然后,您拨打next()
n
次。