3
public static void main(String[] a)     
{       
  Queue queue = new PriorityQueue();
  queue.add(44);
  queue.add(90);
  queue.add(9);
  queue.add(89);
  queue.add(45);
  queue.add(61);
  queue.add(1);
  System.out.println(queue);
}

输出 :-[1, 45, 9, 90, 89, 61, 44]

但输出必须是[1,9,44,45,61,89,90]

4

3 回答 3

3

当您从队列中取出元素时,它们将按排序顺序检索。

尝试这个:

public static void main(String[] a)
{
    Queue queue = new PriorityQueue();
    queue.add(44);
    queue.add(90);
    queue.add(9);
    queue.add(89);
    queue.add(45);
    queue.add(61);
    queue.add(1);
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
}
于 2013-07-04T13:03:53.127 回答
1

我认为toString()不会以任何特定顺序输出。toString()是使用 , 实现的AbstractCollection.toString(),并且使用集合的迭代器。来自PriorityQueue 文档

方法 iterator() 中提供的 Iterator 不保证以任何特定顺序遍历优先级队列的元素

请注意,这个 SO question可能会有更多用处。

于 2013-07-04T13:03:51.987 回答
1

队列(特别是优先级队列或优先级堆)不是列表

它的排序并不意味着每个元素都被排序(或者你得到任何特定的排序)。

这只意味着,只要你一个元素,它poll()就会是最小的!

可以通过存储一个完全排序的列表(碰巧是这种情况)通过使用不同的、更有效的数据结构来实现:

于 2013-07-04T13:05:21.590 回答