与最大堆toArray函数一起使用时,Collections.reverseOrder()比较器将按字典顺序进行排序。

示例:4、35、41将打印为41、4、35。

我想要的是将它打印为41、35、4

PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
maxHeap.add(4);

//Prints [4]
System.out.println("MaxHeap:"+ Arrays.toString(maxHeap.toArray()));

maxHeap.add(35);

//Prints [35, 4]
System.out.println("MaxHeap:"+ Arrays.toString(maxHeap.toArray()));

maxHeap.add(41);

//Prints [41, 4, 35]
System.out.println("MaxHeap:"+ Arrays.toString(maxHeap.toArray()));

最佳答案

整数的默认比较器不是字典编排的。

问题是PriorityQueue使用的内部数组(即toArray()返回的内容)未排序。

要按排序顺序获取元素,您需要在PriorityQueue中调用poll()方法,直到没有更多元素为止。定义优先级队列的方式。

07-24 18:31