PriorityQueue增加元素时,并不能使整个数列是有序的,只能保证队首元素是最大值或最小值,其它是乱序的。删除队首元素时,会更新新队首元素。
测试代码如下
@Test
public void test4() {
PriorityQueue<Integer> que = new PriorityQueue<>((a1, a2) -> {
return a2 - a1;
});
que.offer(3);
que.offer(1);
que.offer(2);
System.out.println(que);
System.out.println("peek, " + que.peek() + ", " + que);
System.out.println("poll, " + que.poll() + ", " + que); //删除队首
}
输出结果为
[3, 1, 2] //不是预期的[3, 2, 1]
peek, 3, [3, 1, 2]
poll, 3, [2, 1] //输出队首时,会重新调整

本文通过测试代码展示了PriorityQueue在添加和删除元素时的特点。PriorityQueue在插入元素时并不保证完全有序,仅确保队首元素是最小或最大值。当删除队首元素后,队列会自动调整。在示例中,队列初始为[3,1,2],删除队首元素3后,队列变为[2,1]。
689

被折叠的 条评论
为什么被折叠?



