PriorityQueue
实现Queue
,但是PriorityQueue
是Queue
的FIFO数据结构?
答案 0 :(得分:5)
不,不是。根据{{3}}
优先级队列的元素按其自然顺序排序,或者由队列构建时提供的比较器排序,具体取决于使用的构造函数
和
此队列的头部是指定排序
的最小元素
答案 1 :(得分:5)
来自Queue界面:
队列通常(但不一定)在FIFO中对元素进行排序 (先进先出)方式。优先队列除外, 根据提供的比较器订购元件,或者 元素的自然顺序
因此,PriorityQueue是一个例外,只有当比较器按此顺序排序时它才会成为FIFO队列。
答案 2 :(得分:4)
PriorityQueue不关心FIFO / LIFO。 它处理优先权。 在多个具有相同优先级的对象的情况下 - 您不能指望任何FIFO LIFO行为。
答案 3 :(得分:2)
优先级队列是一种数据结构,它使元素保持一致的内部顺序 - 在Java实现中,此顺序在构造时指定。队列的头部以及其他元素的顺序由您指定的排序标准确定。
例如,假设你有一个包含学生的PriorityQueue,你设置的顺序是升序年龄 - 队列的头部将包含最年轻的学生,尾部将是最老的。当您添加到PriorityQueue时,学生将根据他们的年龄插入正确的位置,因为这是您指定的顺序,他们的插入顺序是无关紧要的。