2012-04-11 108 views
0

看起来像PriorityQueue是一个LIFO结构(如果它的所有元素具有相同的优先级),我说得对吗?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; 
} 
+0

你的问题是什么? – st0le 2012-04-11 10:01:14

回答

0

从文档:基于优先级堆

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

该队列的头部是相对于指定排序的最小元素。如果多个元素的价值最小,那么头是其中一个元素 - 领带被任意破坏。队列检索操作轮询,删除,查看和元素访问队列头部的元素。

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

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

+0

如何解释这一行 – 2012-04-11 10:06:09

+0

如何解释queue [1] = queue [size]?这将把最后一个元素带到头顶位置。 – 2012-04-11 10:07:36

+0

如果您更新问题以提出具体问题,则更容易。 – pcalcao 2012-04-11 10:11:12

1

在Javadoc中,'关系被任意破坏'的陈述意味着你的问题的答案是'不'。