作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
看了PriorityBlockingQueue的源码之后,发现这个类的实现是基于二叉堆来实现的,然而自己以前对二叉堆基本上没有认真的研究过,这是自己第一次看到关于二叉堆的“插入元素”、“取出元素”等相关操作的一个具体实现。于是,想想,PriorityQueue里面的内部实现也应该是这样的,因此也就看了下PriorityQueue的源码,下面一点点的进行介绍。有了PriorityBlockingQueue类中关于二叉堆的相关操作的基础,看PriorityQueue类就比较简单了。
1、PriorityQueue的继承体系
public class PriorityQueue<E> extends AbstractQueue<E>
implements java.io.Serializable
PriorityQueue继承了AbstractQueue类,而AbstractQueue类是实现了Queue接口。
2、PriorityQueue的相关属性介绍
PriorityQueue类相关属性介绍
1、默认容量
private static final int DEFAULT_INITIAL_CAPACITY = 11;
2、最大容量
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
3、二叉堆
//基于二叉堆来实现优先队列,queue[i]的子节点为queue[2*i+1]/queue[2*i+2];
transient Object[] queue; // non-private to simplify nested class access
4、优先队列元素个数
private int size = 0;
5、比较器,优先队列中的元素就是按照此比较器进行排序。
private final Comparator
3、PriorityQueue构造函数介绍
PriorityQueue类相关构造函数介绍
1)、创建一个优先队列对象,默认大小为11,队列中的元素按照自然顺序排序。
public PriorityQueue() {
this(DEFAULT_INITIAL_CAPACITY, null);
}
2)、创建一个指定大小的优先队列对象,队列中的元素按照自然顺序排序。
public PriorityQueue(int initialCapacity) {
this(initialCapacity, null);
}
3)、创建一个默认大小(11)的优先队列对象,队列中的元素按照指定比较器进行排序。
public PriorityQueue(Comparator<? super E> comp

最低0.47元/天 解锁文章
642

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



