2016-12-22 43 views
-1

当您使用没有比较器的PriorityQueue时,队列会在每次报价后重新排列,如果是,如何避免?每次添加任何内容到** PriorityQueue **时,它是否会重新排列?

+0

为什么要避免优先队列重新排列?优先级队列的整个想法是保持项目的安排,以便最高优先级的项目位于根目录。如果您不希望数据结构像优先级队列那样工作,那么您不应该使用优先级队列。 –

回答

1

从Javadoc中:基于优先级堆

的极大优先级队列。 优先级队列的元素根据其自然顺序排序,或者由队列构建时提供的Comparator排序,具体取决于使用哪个构造函数。

是的,当添加元素以保持排序时,队列会重新排列。你无法避免它。如果您没有提供Comparator,则使用自然顺序(由Compabable元素类型的实现定义)。如果这不符合您的目的,请不要使用PriorityQueue

+0

这不是严格正确的。如果必须维护堆属性,元素才会重新排列,但在许多情况下,添加的值只会创建新的叶子。这是优先级队列和排序结构(数组,二叉树等)之间的区别,以及为什么它比后者具有更好的性能。 –

相关问题