添加到 PriorityQueue<Integer>

add to 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]

没有任何地方写到 PriorityQueue return 的 toString 实现是按顺序排列的。其实问题在于:

  • PriorityQueue 不提供 toString() 实现,因此使用 AbstractCollection::toString()
  • AbstractCollection::toString() 使用 iterator() 方法打印项目(因此通过调用 next()hasNext()
  • 关于 PriorityQueue::iterator 的文档指出:Returns 在此队列中的元素上的迭代器。迭代器不会 return 任何特定顺序的元素。

所以基本上 toString 依赖于 iterator(),它不提供元素的有序视图。