Java PriorityQueue是先进先出队列吗?

Java PriorityQueue是先进先出队列吗?,java,priority-queue,Java,Priority Queue,PriorityQueue实现了Queue,但是PriorityQueue是像Queue这样的先进先出数据结构吗?不,它不是。依照 优先级队列的元素根据其自然顺序排序,或由队列构造时提供的比较器排序,具体取决于使用的构造函数 及 此队列的头是相对于指定顺序的最小元素 从界面: 队列通常(但不一定)在FIFO中对元素进行排序 (先进先出)方式。例外情况包括优先级队列, 根据提供的比较器或 元素的自然顺序 因此,PriorityQueue是一个例外,只有当比较器按该顺序排序时,它才会成为FIFO队列

PriorityQueue
实现了
Queue
,但是
PriorityQueue
是像
Queue
这样的先进先出数据结构吗?

不,它不是。依照

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

此队列的头是相对于指定顺序的最小元素

从界面:

队列通常(但不一定)在FIFO中对元素进行排序 (先进先出)方式。例外情况包括优先级队列, 根据提供的比较器或 元素的自然顺序


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

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

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


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

+1理论上,顺序可以是FIFO,但通常用于更有趣的事情。它是基于优先级的,而不是基于顺序的