添加到PriorityQueue的

添加到PriorityQueue的<Integer>

问题描述:

对于这一点:添加到PriorityQueue的<Integer>

PriorityQueue<Integer> pq = new PriorityQueue<>(); 
    pq.add(2); 
    System.out.println(pq); 
    pq.add(4); 
    System.out.println(pq); 
    pq.add(1); 
    System.out.println(pq); 

我得到这样的输出:

[2] 
[2, 4] 
[1, 4, 2] 

为什么输出的第三行不[2,4,1]

无论如何写出PriorityQueuetoString实现都会按顺序返回它们。其实,问题是:

  • PriorityQueue不提供toString()实现,所以AbstractCollection::toString()使用。
  • AbstractCollection::toString()打印项通过使用iterator()方法(以便通过调用next()hasNext()
  • 文档约PriorityQueue::iterator状态:返回在此队列中的元素的迭代器。迭代器不会以任何特定顺序返回元素。

所以基本上toString依靠iterator()其不提供所述元素的有序图。