Java 优先队列轮询
看起来PriorityQueue是一种后进先出结构(如果其中所有元素的优先级相同),对吗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
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]?这将把最后一个元素带到最前面的位置。如果你更新你的问题,问一些具体的问题,会更容易。