【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
在微博上看了篇文章,“关于PriorityQueue 二叉堆的问题“,然后顺便看了一下 PriorityQueue 的源代码和堆排序。PriorityQueue 在出队时,会将位于数组中第一位的元素,同时也是最小的那个元素返回。之后会将数组中最后一个元素放入数组的第一位,然后进行堆调整。
可见,PriorityQueue 并不是维护一个有序的数组,而是只保证二叉堆的根节点是最小的元素。每一次出队操作都会进行堆调整,但每一次堆调整的时间复杂度都是 O(logn),所以在数据量比较大的时候还是一个不错的选择。
PriorityQueue 的堆排序相关的方法主要有两个:siftUp 和 siftDown。前者是 add、offer 等操作使用,后者是 poll 等操作使用。
来源:oschina
链接:https://my.oschina.net/u/1158769/blog/135138