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

这是优先队列 

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参数 

和上面类似 不多说了







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值