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]