PriorityQueue是FIFO队列吗?

时间:2012-10-02 14:40:07

标签: java priority-queue

PriorityQueue实现Queue,但是PriorityQueueQueue的FIFO数据结构?

4 个答案:

答案 0 :(得分:5)

不,不是。根据{{​​3}}

  

优先级队列的元素按其自然顺序排序,或者由队列构建时提供的比较器排序,具体取决于使用的构造函数

  

此队列的头部是指定排序

的最小元素

答案 1 :(得分:5)

来自Queue界面:

  

队列通常(但不一定)在FIFO中对元素进行排序   (先进先出)方式。优先队列除外,   根据提供的比较器订购元件,或者   元素的自然顺序

因此,PriorityQueue是一个例外,只有当比较器按此顺序排序时它才会成为FIFO队列。

答案 2 :(得分:4)

PriorityQueue不关心FIFO / LIFO。 它处理优先权。 在多个具有相同优先级的对象的情况下 - 您不能指望任何FIFO LIFO行为。

答案 3 :(得分:2)

优先级队列是一种数据结构,它使元素保持一致的内部顺序 - 在Java实现中,此顺序在构造时指定。队列的头部以及其他元素的顺序由您指定的排序标准确定。

例如,假设你有一个包含学生的PriorityQueue,你设置的顺序是升序年龄 - 队列的头部将包含最年轻的学生,尾部将是最老的。当您添加到PriorityQueue时,学生将根据他们的年龄插入正确的位置,因为这是您指定的顺序,他们的插入顺序是无关紧要的。