在我看来,数组的最大优点是我们可以使用O(1)访问任何元素。但是只能从头或尾访问队列。

此外,PriorityBlockingQueue是一个有序集合,这意味着每个单独的add操作都会导致所有较大(或较小)的元素移位。那很贵。

所以我不明白为什么不使用链表。

最佳答案

此外,PriorityBlockingQueue是一个有序集合,这意味着每个单独的add操作都会导致所有较大(或较小)的元素移位。


您误解了PriorityBlockingQueue的内部工作原理:它不会使整个数组上移或下移。那确实太贵了。相反,它使用名为heap的数据结构,该数据结构使用数组进行存储,但不对其应用“普通”索引。相反,它以树状方式存储项目,从而可以进行O(log2n)插入和删除。

有关PriorityBlockingQueue如何维护堆的详细信息,请参见shiftDownimplementationsshiftUp中的PriorityQueue.java

09-11 17:55