您的位置:首页 > 理论基础 > 数据结构算法

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

2018-01-10 10:28 337 查看
这是优先队列 

public class PriorityQueue<E> extends AbstractQueue<E> 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<? 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参数 

和上面类似 不多说了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: