Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按优先级队列对整数排序_Java_Sorting_Priority Queue - Fatal编程技术网

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