为什么PriorityQueue不会像Queue一样?

Ben*_*Ben 7 java queue stack priority-queue

我正在使用PriorityBlockingQueue优先级字段.在我的测试中,我使用System#currentTime()优先级 - 计算机获得相同的优先级,以至于毫秒是相同的(或者更像是PC上的毫秒具有误差幅度).

当优先级相同时,队列就像堆栈一样,这看起来很奇怪.当元素的优先级相同时,是否有一种替代方法可以使队列像正常队列一样(即FIFO而不是LIFO行为)?

Lou*_*man 11

此类的操作不保证具有相同优先级的元素的排序.如果需要强制执行排序,则可以定义使用辅助键来断开主要优先级值中的关系的自定义类或比较器.

PriorityBlockingQueue文档本身告诉你,如何绕过它,如果你需要.

  • "无法保证具有相同优先级的元素的排序." 这意味着它可以像一个堆栈,它可以像一个队列,它可以完全随机行为,它可能取决于它是星期二还是外面是晴天._不保证._ (3认同)
  • 为什么?大多数用户使用具有不同优先级的`PriorityBlockingQueue` _. (2认同)
  • 因为堆栈不是队列,还是只是语义? (2认同)