【问题标题】:Print content of priority queue打印优先队列内容
【发布时间】:2014-05-20 15:08:28
【问题描述】:

如何使 print_queue 在 Java 中正常工作?这是我自己实现的队列。

使用Iterator() 可以正常工作,只是它以随机顺序打印数字。

package data_structures_java ;
import java.util.Iterator;
import java.util.PriorityQueue ;
import java.util.* ;
public class Queue_implementation {
 
    PriorityQueue<Integer> actual_queue ;
    
    public Queue_implementation(){
        actual_queue = new PriorityQueue<Integer>() ;
        
    }
    
    public  void add(int num){
        actual_queue.add(num) ;
    }
    
    public int remove(){
          return actual_queue.remove() ;          
    }
    
    public int peek(){
        if( actual_queue.isEmpty()) return -1 ;
        else return actual_queue.peek() ;
    }
    
    public int element(){
        return actual_queue.element() ;
    }
    
    public void print_queue(){      
        PriorityQueue<Integer>copy = new PriorityQueue<Integer>();
        copy.addAll(actual_queue) ;        
        Iterator<Integer> through = actual_queue.iterator() ;
        while(through.hasNext() ) {
                System.out.print(through.next() + " ") ;
        }
        System.out.println() ;
                
        actual_queue.addAll(copy) ;
        
    }
    public static void main(String[] args) {            
        Queue_implementation x = new Queue_implementation() ;
        x.add(10) ;
        x.add(9) ;
        x.add(8) ;
        x.add(7) ;
        x.add(6) ;
        x.print_queue() ;
    }

}

我尝试使用toArray(),但它返回Object[],我不知道如何遍历:

Object[] queue_object_array = x.toArray() ;
Arrays.sort(queue_object_array) ;

【问题讨论】:

  • 您的队列应该是队列还是优先队列?他们做两件不同的事情。
  • @WillNewton,实际上只是排队,但我正在使用来自 java api 的 std.priority 队列

标签: java queue priority-queue


【解决方案1】:

使用 Iterator() 可以正常工作,只是它以随机顺序打印数字。

这正是它在 Javadoc 中所说的。在PriorityQueue 中获得排序的唯一方法是使用poll()remove() 方法。

【讨论】:

  • 是的,我不明白他这样做的原因 - 我,主题启动器给你 +1
  • ejp,但是当我使用 remove() - 我从队列本身中删除元素时,我是否需要以某种方式存储它并在 remove() 之后复制回来?
  • @ERJAN 是的,如果您之后需要这些内容。
【解决方案2】:

一条线解决方案:当您需要快速调试时很有用。

System.out.println(Arrays.toString(priorityQueue.toArray()));

编辑:另一个简洁的代码:

System.out.println(priorityQueue);

【讨论】:

  • 代码和System.out.println(priorityQueue)有什么区别
  • @ZhaoGang 感谢您的留言。其实我查了之后是一样的。只是因为我的思考过程导致我这样做 :D 你可以添加一个新的答案,或者我将编辑我的答案。
  • 它们大致相同,所以我认为不需要新的答案,如果您愿意,请编辑您的答案,谢谢。
  • 这些都不按优先顺序打印 PQ。显然你还没有尝试过。
  • @user207421 我不是说这个方法会按顺序打印。它对调试很有用。我懒得查了,但我记得原来的帖子只是想把内容打印出来。
【解决方案3】:

如果您需要打印每个元素都是二维数组的 priorityQueue 的内容,您可以尝试使用:

System.out.println(Arrays.deepToString(priorityQueue.toArray());

如果是一维数组:

System.out.println(Arrays.toString(priorityQueue.toArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2017-04-11
    相关资源
    最近更新 更多