Java 优先队列轮询

Java 优先队列轮询,java,data-structures,priority-queue,Java,Data Structures,Priority Queue,看起来PriorityQueue是一种后进先出结构(如果其中所有元素的优先级相同),对吗 public E poll() { if (size == 0) return null; modCount++; E result = (E) queue[1]; queue[1] = queue[size]; queue[size--] = null; // Drop extra ref to prevent memory leak

看起来PriorityQueue是一种后进先出结构(如果其中所有元素的优先级相同),对吗

 public E poll() {
    if (size == 0)
        return null;
    modCount++;

    E result = (E) queue[1];
    queue[1] = queue[size];
    queue[size--] = null;  // Drop extra ref to prevent memory leak
    if (size > 1)
        fixDown(1);

    return result;
}

从文件中:

基于优先级堆的无限优先级队列。优先级队列的元素根据其自然顺序进行排序,或者由队列构造时提供的比较器进行排序,具体取决于所使用的构造函数。优先级队列不允许空元素。依赖于自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)

此队列的头是相对于指定顺序的最小元素。如果多个元素以最小值绑定,则头部就是这些元素之一——绑定被任意断开。队列检索操作轮询、移除、查看和元素访问队列头部的元素


基本上,总是有一个“优先级”,默认情况下,这是元素的自然顺序。

Javadoc中的语句“任意断开连接”意味着问题的答案是“否”。

如何解释队列[1]=队列[size]?这将把最后一个元素带到最前面的位置。如果你更新你的问题,问一些具体的问题,会更容易。