在我看来,数组的最大优点是我们可以使用O(1)访问任何元素。但是只能从头或尾访问队列。
此外,PriorityBlockingQueue是一个有序集合,这意味着每个单独的add操作都会导致所有较大(或较小)的元素移位。那很贵。
所以我不明白为什么不使用链表。
最佳答案
此外,PriorityBlockingQueue是一个有序集合,这意味着每个单独的add操作都会导致所有较大(或较小)的元素移位。
您误解了PriorityBlockingQueue
的内部工作原理:它不会使整个数组上移或下移。那确实太贵了。相反,它使用名为heap的数据结构,该数据结构使用数组进行存储,但不对其应用“普通”索引。相反,它以树状方式存储项目,从而可以进行O(log2n)插入和删除。
有关PriorityBlockingQueue
如何维护堆的详细信息,请参见shiftDown
的implementations和shiftUp
中的PriorityQueue.java
。