共同学习Java源代码-数据结构-PriorityQueue类(一)

这是优先队列 

public class PriorityQueue extends AbstractQueue implements java.io.Serializable

这是类的描述 继承自 AbstractQueue 实现了Serializable接口


    private static final int DEFAULT_INITIAL_CAPACITY = 11;

默认初始长度为11


    transient Object[] queue;

队列的基础存储结构 就是数组


    private int size = 0;

队列中元素数目


   private final Comparator comparator;

Comparator属性 为队列排序用的


    transient int modCount = 0;

修改次数


    public PriorityQueue() {
        this(DEFAULT_INITIAL_CAPACITY, null);
    }

    public PriorityQueue(int initialCapacity) {
        this(initialCapacity, null);
    }

    public PriorityQueue(Comparator comparator) {
        this(DEFAULT_INITIAL_CAPACITY, comparator);
    }

    public PriorityQueue(int initialCapacity,
                         Comparator comparator) {
        if (initialCapacity < 1)
            throw new IllegalArgumentException();
        this.queue = new Object[initialCapacity];
        this.comparator = comparator;
    }

最后一个构造方法注入了两个属性 一个是数组 一个是Comparator 上面其他的构造方法都是变相调用最后一个


    @SuppressWarnings("unchecked")
    public PriorityQueue(Collection c) {
        if (c instanceof SortedSet) {
            SortedSet ss = (SortedSet) c;
            this.comparator = (Comparator) ss.comparator();
            initElementsFromCollection(ss);
        }
        else if (c instanceof PriorityQueue) {
            PriorityQueue pq = (PriorityQueue) c;
            this.comparator = (Comparator) 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 c) {
        this.comparator = (Comparator) c.comparator();
        initFromPriorityQueue(c);
    }

这个构造方法接收一个自身类型的参数 获取参数的Comparator 赋给自身的Comparator 调用initFromPriorityQueue初始化队列

    @SuppressWarnings("unchecked")
    public PriorityQueue(SortedSet c) {
        this.comparator = (Comparator) c.comparator();
        initElementsFromCollection(c);
    }

这个构造方法传入一个SortedSet参数 

和上面类似 不多说了







你可能感兴趣的:(Java)