0

看起来 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;
}
4

2 回答 2

1

Javadoc 中“关系被任意破坏”的声明意味着您的问题的答案是“不”。

于 2012-04-11T10:04:07.573 回答
0

从文档中:

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

此队列的头部是相对于指定排序的最小元素。如果多个元素以最低值绑定,则头部是这些元素之一——绑定被任意打破。队列检索操作 poll、remove、peek 和 element 访问队列头部的元素。

http://docs.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html

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

于 2012-04-11T10:02:56.487 回答