2011-10-28 14 views
7

が、私はこののJava:プライオリティキュー

パブリッククラスPriorityQueueExampleように書きJavaプログラムを持っている{

public static void main(String[] args) { 
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 
    pq.add(10); 
    pq.add(1); 
    pq.add(9); 
    pq.add(2); 
    pq.add(8); 
    pq.add(3); 
    pq.add(7); 
    pq.add(4); 
    pq.add(6); 
    pq.add(5); 
System.out.println(pq); 

} 

}

私の質問は、プライオリティキューは、それらを並べ替えていない理由です。 Javaの仕様に従って、それは同等のものを実装し、並べ替え順序を維持します(自然なソート)

私のプログラムの出力は、[1,2,3,4,5,9,7,10,6,8 ]

答えて

7

優先度キューに挿入するだけでは、ソートされた順序で要素を格納しないため、要素のリストを並べ替えることはできません。部分的にソートされたヒープオーダーにそれらを格納します。あなたはそれらをソートするために、ループ内の要素を削除する必要があります。

while (pq.size() > 0) 
    System.out.println(pq.remove()); 
7

それはソートされているが、内部要素はヒープに格納されています。 peek()poll()、またはremove()に電話すると、正しい順序(キューにアクセスする方法)が得られます。

関連する問題