Java 按优先级队列对整数排序
我想写一个程序,它可以按优先级队列对项目进行排序 但是下面的代码不起作用,我不知道问题出在哪里 有什么帮助吗?? 提前感谢您的关注Java 按优先级队列对整数排序,java,sorting,priority-queue,Java,Sorting,Priority Queue,我想写一个程序,它可以按优先级队列对项目进行排序 但是下面的代码不起作用,我不知道问题出在哪里 有什么帮助吗?? 提前感谢您的关注 public class SortingASequenceByPriorityQueue { public static void main(String[] args) { PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(1000, new Comparat
public class SortingASequenceByPriorityQueue {
public static void main(String[] args) {
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(1000, new Comparator<Integer>() {
public int compare(Integer w1, Integer w2) {
if(w1.intValue()> w2.intValue())
return 1;
else if( w1.intValue()< w2.intValue())
return -1;
return 0;
}
});
pQueue.add(12);
pQueue.add(1);
pQueue.add(5);
pQueue.add(22);
pQueue.add(3);
pQueue.add(2);
pQueue.add(124);
pQueue.add(14);
pQueue.add(111);
pQueue.add(9);
pQueue.add(30);
Object[] ar = pQueue.toArray();
for (int i = 0; i< ar.length; i++){
System.out.println(ar[i].toString());
}
}
}
公共类排序AsequenceByPriority队列{
公共静态void main(字符串[]args){
PriorityQueue pQueue=new PriorityQueue(1000,new Comparator(){
公共整数比较(整数w1,整数w2){
如果(w1.intValue()>w2.intValue())
返回1;
else if(w1.intValue()
输出如下:
一,
3.
2.
14
9
5.
124
22
111
12
30实际上,您要做的是堆排序。但是您不能使用
toArray()
来实现这一点,对于PriorityQueue
,它声明
返回包含此队列中所有元素的数组。这个
元素没有特定的顺序
您要做的是从PriorityQueue
中逐个删除元素,并将它们添加到某个数组中
Object[] arr = new Object[pQueue.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = pQueue.remove();
}
System.out.println(Arrays.toString(arr));
这是因为当您添加或删除元素以维护heap属性时,
PriorityQueue
会重新排列自身。您实际上是在尝试进行堆排序。但是您不能使用toArray()
来实现这一点,对于PriorityQueue
,它声明
返回包含此队列中所有元素的数组。这个
元素没有特定的顺序
您要做的是从PriorityQueue
中逐个删除元素,并将它们添加到某个数组中
Object[] arr = new Object[pQueue.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = pQueue.remove();
}
System.out.println(Arrays.toString(arr));
这是因为在添加或删除元素以维护heap属性时,
PriorityQueue
会重新排列自身。这是在文档中指定的。“返回一个包含此队列中所有元素的数组。元素没有特定顺序。”您的目标似乎是按升序对整数集合排序。当有其他/更好的选择时,为什么需要使用PriorityQueue
。“返回一个包含此队列中所有元素的数组。元素没有特定顺序。”您的目标似乎是按升序对整数集合排序。当有其他/更好的选择时,为什么需要使用PriorityQueue
。