Java 为什么在执行poll()时优先级队列会重新排序元素?

Java 为什么在执行poll()时优先级队列会重新排序元素?,java,data-structures,priority-queue,Java,Data Structures,Priority Queue,今天,当我从优先级队列中轮询()元素时,我意识到在轮询()元素之后,队列中的其余元素会改变顺序。基本上,我有优先级队列,我重写了比较器方法,让它们按照它在字符串中显示的时间(最大堆)排序 优先级队列将是 ['a','b','c'] 当我执行poll()时,优先级队列变为: ['c', 'b'] 为什么不['b','c'] 任何帮助都将不胜感激。PriorityQueues将其元素存储在堆中(默认情况下为最小堆,但这可以通过传递给构造函数的Collections.reverseOrder()进

今天,当我从优先级队列中轮询()元素时,我意识到在轮询()元素之后,队列中的其余元素会改变顺序。基本上,我有优先级队列,我重写了比较器方法,让它们按照它在字符串中显示的时间(最大堆)排序

优先级队列将是

['a','b','c']
当我执行poll()时,优先级队列变为:

['c', 'b']
为什么不['b','c']


任何帮助都将不胜感激。

PriorityQueues将其元素存储在堆中(默认情况下为最小堆,但这可以通过传递给构造函数的
Collections.reverseOrder()
进行更改)。此数据结构仅保证根据元素的自然顺序,第一个元素或从
poll()
接收的元素将是队列中最小的元素。删除对象时,队列将“heapified”以保证最小元素将是下一个轮询的元素。当您通过调用toString方法打印队列时,堆将以级别顺序遍历的方式打印,这不一定代表元素的存储方式

您可以阅读有关堆和树遍历的更多信息

['a','b','c']
['c', 'b']