与最大堆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()
方法,直到没有更多元素为止。定义优先级队列的方式。