4

PriorityQueue实现了Queue,但是PriorityQueueFIFO 数据结构像Queue吗?

4

4 回答 4

5

不它不是。根据Javadoc

优先级队列的元素按照它们的自然顺序排序,或者由队列构建时提供的 Comparator 排序,具体取决于使用哪个构造函数

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

于 2012-10-02T14:42:28.477 回答
5

队列界面:

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

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

于 2012-10-02T14:43:04.683 回答
4

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

于 2012-10-02T14:44:01.867 回答
2

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

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

于 2012-10-02T14:49:16.350 回答