看起来PriorityQueue是一个LIFO结构(如果其中的所有元素具有相同的优先级),我是对的吗?
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;
}
答案 0 :(得分:1)
Javadoc中关于“关系被任意破坏”的陈述意味着你的问题的答案是“不”。
答案 1 :(得分:0)
来自文档:
基于优先级堆的无界优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列不允许null元素。依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
此队列的头部是指定排序的最小元素。如果多个元素被绑定为最小值,则头部是这些元素之一 - 关系被任意打破。队列检索操作轮询,删除,查看和元素访问队列头部的元素。
http://docs.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html
基本上,总有一个“优先级”,默认情况下,它是元素的自然顺序。