java集合类型源码解析之PriorityQueue
本来第二篇想解析一下LinkedList,不过扫了一下源码后,觉得LinkedList的实现比较简单,没有什么意思,于是移步PriorityQueue。 PriorityQueue通过数组实现了一个堆数据结构(相当于一棵完全二叉树),元素的优先级可以通过一个Comparator来计算,如果不指定Comparator,那么元素类型应该实现Comparable接口。最终compare得出的最小元素,放在堆的根部。 成员变量 public class PriorityQueue<E> extends AbstractQueue<E> { transient Object[] queue; // non-private to simplify nested class access private int size = 0; private final Comparator<? super E> comparator; transient int modCount = 0; // non-private to simplify nested class access } PriorityQueue的成员变量和ArrayList高度类似: queue 元素存储空间数组,代表一棵完全二叉树,索引位置n的节点的左右子树分别为(2n+1)和(2n+2); size 元素数量 modCount