PriorityBlockingQueue何时对元素进行排序?

时间:2016-02-09 14:07:23

标签: java priority-queue blockingqueue

我有一个PriorityBlockingQueue,其中包含一系列元素。我已经实现了Comparable接口并覆盖了compareTo(),以便定义哪个元素更少,等于或大于其他元素。

所以我想知道优先级队列是如何工作的,也就是说,它何时对其元素进行排序?自动对队列上的任何事件(添加,删除,修改)?

有人可以向我解释优先级队列的工作原理吗?我不清楚。

2 个答案:

答案 0 :(得分:4)

事实上,PriorityQueuePriorityBlockingQueue代理人)根本不会对元素进行排序 - 而是使用heap data structure。此结构仅保证在请求时提供最小(或最大)元素,并且无需实际排序整个集合。

底层数据结构的工作方式是排序只是部分的(只需要尽可能多地完成工作以确保最小/最大元素位于堆顶部),并且每当插入一个元素时都会完成或当顶部元素被移除时。

答案 1 :(得分:0)

PriorityQueue基于优先级堆,因此优先级队列的头部始终是最小的,具体取决于比较条件。它不保持队列中其他元素的顺序。此外,即使优先级队列的迭代器也不保证按特定顺序进行解析。