java为什么priorityQueue没有对元素进行排序
下面是一段代码
Comparator<StudentDTO> compareNames = Comparator.comparing(StudentDTO::getName);
PriorityQueue<StudentDTO> h = new PriorityQueue<>(compareNames);
h.offer(new StudentDTO(5, "c"));
h.offer(new StudentDTO(2, "b"));
h.offer(new StudentDTO(8, "z"));
h.offer(new StudentDTO(1, "a"));
系统。出来println(h)
我得到的结果如下:
[StudentDTO [rollNo=1, Name=a], StudentDTO [rollNo=2, Name=b], StudentDTO [rollNo=8, Name=z], StudentDTO [rollNo=5, Name=c]]
不确定为什么Name=z出现在Name=c之前。 编辑:我正在使用Java8
# 1 楼答案
当您像这样打印} 的文档,它将返回迭代器,迭代器不按特定顺序返回元素:
PriorityQueue
时,AbstractCollection
中的toString
方法在下面被调用。它使用扩展集合的Iterator
遍历集合,并从中创建一个String
。如果检查^{如果您想按比较器定义的优先级顺序检索元素,请使用
poll
和remove
等方法。考虑到您已经覆盖了StudentDTO::toString method
,类似这样的操作将从队列中打印对象,并将它们从队列中删除:以及输出: