PriorityQueue源码解析(一)

举报
知识浅谈 发表于 2022/10/14 10:12:00 2022/10/14
【摘要】 PriorityQueue源码解析(一)

在这里插入图片描述

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈

PriorityQueue源码解析(一)总结
🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈PriorityQueue源码函数

🍮PriorityQueue()无参无参构造函数

含义: 这个是创建一个不指定队列大小的优先对列,因为是使用最小堆/最大堆来实现优先队列的,所以底层使用的Object数组,所以使用DEFAULT_INITIAL_CAPACITY来默认指定数组的大小为11,第二个参数是传入的比较器,即comparator,因为未手动指定,所以传入的是一个null,默认的是最小堆。

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

🍮PriorityQueue(int initialCapacity)

含义: 这个是创建一个指定队列大小的优先对列,通过initialCapacity这个参数接受默认的底层的数组的大小来创建指定大小的数组,同理,因为未指定comparator比较器,传入一个null。

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

🍮PriorityQueue(Comparator<? super E> comparator)

含义: 这个事是创建一个只是指定比较器的优先队列,我们常常会用到,因为可以通过这个比较器来设置优先队列事小顶堆还是大顶堆,创建一个具有默认初始容量的 PriorityQueue。

public PriorityQueue(Comparator<? super E> comparator) {
    this(DEFAULT_INITIAL_CAPACITY, comparator);
}

🍮PriorityQueue(int initialCapacity,Comparator<? super E> comparator)

含义: 这个构造函数是上边两个默认调用的,如果手动指定了初始容量和比较器,则就直接创建一个具有指定初始容量的 PriorityQueue,它根据指定的比较器对其元素进行排序。

public PriorityQueue(int initialCapacity,
                     Comparator<? super E> comparator) {
    // Note: This restriction of at least one is not actually needed,
    // but continues for 1.5 compatibility
    if (initialCapacity < 1)
        throw new IllegalArgumentException();
    this.queue = new Object[initialCapacity];
    this.comparator = comparator;
}

🍮PriorityQueue(Collection<? extends E> c)

含义: 创建一个包含指定集合中元素的 PriorityQueue。如果指定的集合是一个 SortedSet 的实例或者是另一个 PriorityQueue,那么这个优先级队列将按照相同的顺序进行排序。否则,此优先级队列将根据其元素的自然顺序进行排序。

@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);
    }
}

🍮PriorityQueue(PriorityQueue<? extends E> c)

含义: 这个和上边那个比较像,这个参数中已知是优先队列,就会直接调用这个构造函数。

@SuppressWarnings("unchecked")
public PriorityQueue(PriorityQueue<? extends E> c) {
    this.comparator = (Comparator<? super E>) c.comparator();
    initFromPriorityQueue(c);
}

从上边的三个函数可以看出都调用了initFromPriorityQueue和initFromCollection这两个函数,我们下篇文章中继续探讨这两个函数的作用。

🍚总结

以上是啊关于PriorityQueue源码中的不同的构造函数的解析工作,希望有所帮助,Written By 知识浅谈

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。