添加到 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()
,它不提供元素的有序视图。
为此:
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()
,它不提供元素的有序视图。