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 によって順序付けられます。プライオリティ キューは null 要素を許可しません。自然順序付けに依存するプライオリティ キューも、比較不可能なオブジェクトの挿入を許可しません (これを行うと、ClassCastException が発生する可能性があります)。

このキューの先頭は、指定された順序に関して最小の要素です。複数の要素が最小値で結合されている場合、ヘッドはそれらの要素の 1 つです。結合は任意に解除されます。キューの取得操作は、キューの先頭にある要素にポーリング、削除、ピーク、および要素アクセスします。

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

基本的に、常に「優先度」があり、デフォルトでは要素の自然な順序です。

于 2012-04-11T10:02:56.487 に答える