什么结构最适合“获得最优先的X元素”?

时间:2011-11-17 23:03:03

标签: java performance collections

我有很多具有int优先级的元素。元素的优先级是可更改的。

行动计数getFirstPriorityElements(int count) - n
操作计数updatePriorityOfElement(Object o, int priority) - n

我应该使用什么样的最佳性能结构来获得具有最佳优先级的前X个元素?

1 个答案:

答案 0 :(得分:1)

如果你想拥有一个恒定的优先级,那么PriorityQueueTreeSet会适合你(如果你想要弹出元素,那就是队列,如果你想保留它们,那就是你的队列)。 / p>

但是,通过更改优先级,您必须在每次更改时重新排序集合。或者更好 - 在每次迭代之前。但这应该是同步的。

因此,创建一个使用自定义Comparator的集合,并在每次调用iterator()时重新定义其元素。例如,您可以扩展TreeSet并覆盖iterator()方法。然后,您拨打next() n次。