🎇个人主页:Ice_Sugar_7
🎇所属专栏:Java数据结构
🎇欢迎点赞收藏加关注哦!
🍉前言
优先级队列底层是用堆实现的,关于堆的实现,之前的文章已经详细介绍过了,文章链接:二叉树1:堆的实现
🍉构造方法
方法 | 功能 |
---|---|
PriorityQueue() | 创建一个空的优先级队列,默认容量是11 |
PriorityQueue(int initialCapacity) | 创建一个初始容量为initialCapacity的优先级队列(注意:initialCapacity不能小于1,否则会抛IllegalArgumentException异常) |
PriorityQueue(Collection<? extends E> c) | 将一个包含指定类型元素的集合c添加到新建的PriorityQueue中 |
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) | 使用比较器来初始化PriorityQueue(可以不传initialCapacity,此时使用默认容量) |
注意:要将自定义类型的对象存放到PriorityQueue时,通常需要传入一个比较器,重写compare方法来定义对象之间的优先级顺序文章来源:https://www.toymoban.com/news/detail-829178.html
在Java中,PriorityQueue默认是小堆
,如果要将其转化为大堆,就要用比较器初始化PriorityQueue文章来源地址https://www.toymoban.com/news/detail-829178.html
public class MaxHeapExample {
public static void main(String[] args) {
// 创建一个Comparator,定义从大到小的比较规则
Comparator<Integer> maxHeapComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; // 从大到小排序
}
};
// 使用maxHeapComparator创建一个大堆PriorityQueue
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(maxHeapComparator);
// 向大堆中添加元素
maxHeap.add(3);
maxHeap.add(1);
maxHeap.add(5);
maxHeap.add(2);
// 此时PriorityQueue中的元素将按照大堆的规则排列
// 输出:[5, 3, 1, 2]
System.out.println(maxHeap);
}
}
🍉基本方法
方法 | 功能 |
---|---|
boolean offer(E e) | 插入元素e,插入成功返回true。如果e对象为空,则抛出NullPointerException异常(即不能插入null) |
E peek() | 获取优先级最高的元素(就是堆顶元素),如果优先级队列为空,返回null |
E poll() | 移除优先级最高的元素并返回,如果优先级队列为空,返回null |
int size() | 获取有效元素的个数 |
void clear() | 清空 |
boolean isEmpty() | 检测优先级队列是否为空,若为空,则返回true |
🍉注意事项
- PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常
- 不能插入null对象,否则会抛出NullPointerException
- 没有容量限制,可以插入任意多个元素,因为其内部可以自动扩容
- 插入和删除元素的时间复杂度为
O(logN)
- PriorityQueue默认情况下是
小堆
——即每次获取到的元素都是最小的元素
到了这里,关于「数据结构」优先级队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!