前言
优先级队列是在队列的基础上,每个元素都带有一个优先级,可以实现按照优先级高低进行存储和访问。 Java 提供了许多实现优先级队列的方法,例如使用堆来实现。在本篇博客中,我将介绍 Java 实现优先级队列实现的具体方法,以及如何使用它来解决实际问题。
一、优先级队列的概念
优先级队列是一种特殊的队列数据结构,它可以根据元素的优先级进行排序,并且在队列操作中优先考虑元素优先级高的元素。与普通队列不同的是,当有新元素加入队列时,队列会自动将其插入到适当的位置,而不是排在队尾。当执行出队操作时,队列会先返回队列中优先级最高的元素,而不是最先加入的元素。优先级队列常常用于任务调度、事件处理等场景,也可以用来解决各种排序问题。------>通俗点来说就是优先级队列也是一个队列,只不过出队列时是出当前队列中最小的那个,因为在队列内部就已经从小到大排序排好了,直接出就完事儿了,但是库函数的优先级队列可以指定是升序还是降序,这个就是后话了。下篇博客详细介绍库函数实现优先级队列,大家点个三连+关注支持一下博主吧。
二、优先级队列的实现( Java 实现)
我们自己实现优先级队列的话那方法就多了,只要你是让最小的先出来就行,比如快排啊,冒泡排序啊,堆排啊……等等都可以做到,但是这边考虑时间复杂度,优先使用堆排序,在数据足够多的情况下,堆排的时间复杂度最小,下面是我们要实现的所有方法,大家也可以先试着思考一下,再接着看博客会比较容易吸收,代码如下:
public class PriorityQueue {
private int[] elem;// 建立一个线式堆
private int usedSize;// 堆里实际的元素
/* 构造方法 */
public PriorityQueue() {
}
/* 初始化成小根堆 */
public void createHeap(int[] array) {
}
/* 入队列,但还是要保持小根堆 */
public void push(int val) {
}
/* 出队列,但仍然要保持小根堆 */
public int pollHeap() {
}
/* 获取堆顶元素但不删除 */
public int peekHeap() {
}
/* 将元素向上调整 */
private void shiftUp(int child) {
}
/* 将元素向下调整 */
private void shiftDown(int parent,int end) {
}
}
2.1、构造方法和peekHeap
如上代码,你们觉得哪个代码最简单呢?一眼看过去,是不是就是构造方法和peekHeap
方法最简单呀,