这是优先队列
public class PriorityQueue
这是类的描述 继承自 AbstractQueue 实现了Serializable接口
private static final int DEFAULT_INITIAL_CAPACITY = 11;
默认初始长度为11
transient Object[] queue;
队列的基础存储结构 就是数组
private int size = 0;
队列中元素数目
private final Comparator super E> comparator;
Comparator属性 为队列排序用的
transient int modCount = 0;
修改次数
public PriorityQueue() {
this(DEFAULT_INITIAL_CAPACITY, null);
}
public PriorityQueue(int initialCapacity) {
this(initialCapacity, null);
}
public PriorityQueue(Comparator super E> comparator) {
this(DEFAULT_INITIAL_CAPACITY, comparator);
}
public PriorityQueue(int initialCapacity,
Comparator super E> comparator) {
if (initialCapacity < 1)
throw new IllegalArgumentException();
this.queue = new Object[initialCapacity];
this.comparator = comparator;
}
最后一个构造方法注入了两个属性 一个是数组 一个是Comparator 上面其他的构造方法都是变相调用最后一个
@SuppressWarnings("unchecked")
public PriorityQueue(Collection extends E> c) {
if (c instanceof SortedSet>) {
SortedSet extends E> ss = (SortedSet extends E>) c;
this.comparator = (Comparator super E>) ss.comparator();
initElementsFromCollection(ss);
}
else if (c instanceof PriorityQueue>) {
PriorityQueue extends E> pq = (PriorityQueue extends E>) c;
this.comparator = (Comparator super E>) pq.comparator();
initFromPriorityQueue(pq);
}
else {
this.comparator = null;
initFromCollection(c);
}
}
这个构造方法接收一个Collection参数
先判断参数是不是SortedSet 如果是就将参数强转为SortedSet 然后获取SortedSet的Comparator 然后调用initElementsFromCollection方法用SortedSet类型参数初始化队列
判断参数是否属于PriorityQueue 也就是自身类型 如果是的话 强转为自身类型 获取自身类型的Comparator 然后调用initFromPriorityQueue方法用自身类型初始化队列
参数为其他情况 将Comparator设为空 意味着默认不排名 调用initFromCollection方法初始化队列
@SuppressWarnings("unchecked")
public PriorityQueue(PriorityQueue extends E> c) {
this.comparator = (Comparator super E>) c.comparator();
initFromPriorityQueue(c);
}
这个构造方法接收一个自身类型的参数 获取参数的Comparator 赋给自身的Comparator 调用initFromPriorityQueue初始化队列
@SuppressWarnings("unchecked")
public PriorityQueue(SortedSet extends E> c) {
this.comparator = (Comparator super E>) c.comparator();
initElementsFromCollection(c);
}
这个构造方法传入一个SortedSet参数
和上面类似 不多说了