Java 添加到PriorityQueue<;整数>;

Java 添加到PriorityQueue<;整数>;,java,queue,priority-queue,Java,Queue,Priority Queue,为此: 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,4,1]?没有写入优先级队列的toString实现按顺序返回它们。其实

为此:

    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,4,1]

没有写入
优先级队列的
toString
实现按顺序返回它们。其实问题是:

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

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

没有任何地方写过
toString
实现为
PriorityQueue
按顺序返回它们。其实问题是:

  • PriorityQueue
    不提供
    toString()
    实现,因此使用了
    AbstractCollection::toString()
  • AbstractCollection::toString()
    通过使用
    iterator()
    方法打印项目(因此通过调用
    next()
    hasNext()
  • 关于
    PriorityQueue::iterator
    的文档说明:返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素
所以基本上
toString
依赖于
iterator()
,它不提供元素的有序视图

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