我知道最小堆是该类由于其效率而使用的结构。在我看来,当将未排序的数据提供给 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);
}
}