最小ヒープは、その効率のためにクラスが使用する構造であることを理解しています。ソートされていないデータが PQ に渡されると、それがヒープにソートされるように思えます。
ただし、compareTo メソッドに従って昇順の要素が供給されると、PQ で最初のアクションが実行された後、それをヒープにソートするのを待ちます。
これがなぜなのか知っていますか?順序付けられていないデータの場合のように、自動的に並べ替えられない理由がわかりません。
私の問題を示していると思われるプログラムを添付しました。
出力:
ソートされていないデータ:
[A、B、D、C、L、F、E、J]
あ
[B、C、D、J、L、F、E]
[1、2、4、3、12、6、5、10]
1
[2、3、4、10、12、6、5]
ソートされたデータ:
[A、B、C、D、E、F、G、H]
あ
[B、D、C、H、E、F、G]
[1、2、3、4、5、6、7、8]
1
[2、4、3、8、5、6、7]
import java.util.PriorityQueue;
public class Queue2
{
public static void main(String[] args)
{
PriorityQueue<String> pQueue = new PriorityQueue<String>();
pQueue.add("A");
pQueue.add("C");
pQueue.add("F");
pQueue.add("B");
pQueue.add("L");
pQueue.add("D");
pQueue.add("E");
pQueue.add("J");
System.out.println(pQueue);
System.out.println(pQueue.remove());
System.out.println(pQueue);
System.out.println();
PriorityQueue<Integer> pQueue2 = new PriorityQueue<Integer>();
pQueue2.add(1);
pQueue2.add(3);
pQueue2.add(6);
pQueue2.add(2);
pQueue2.add(12);
pQueue2.add(4);
pQueue2.add(5);
pQueue2.add(10);
System.out.println(pQueue2);
System.out.println(pQueue2.remove());
System.out.println(pQueue2);
System.out.println();
PriorityQueue<String> pQueue3 = new PriorityQueue<String>();
pQueue3.add("A");
pQueue3.add("B");
pQueue3.add("C");
pQueue3.add("D");
pQueue3.add("E");
pQueue3.add("F");
pQueue3.add("G");
pQueue3.add("H");
System.out.println(pQueue3);
System.out.println(pQueue3.remove());
System.out.println(pQueue3);
System.out.println();
PriorityQueue<Integer> pQueue4 = new PriorityQueue<Integer>();
pQueue4.add(1);
pQueue4.add(2);
pQueue4.add(3);
pQueue4.add(4);
pQueue4.add(5);
pQueue4.add(6);
pQueue4.add(7);
pQueue4.add(8);
System.out.println(pQueue4);
System.out.println(pQueue4.remove());
System.out.println(pQueue4);
}
}