目录

集合Queue系列六PriorityQueue

【集合Queue系列六】PriorityQueue

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

https://i-blog.csdnimg.cn/blog_migrate/5b7d56665d406fee3159289ac61fa974.jpeg#pic_center

  • 推荐: ,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • :全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • :罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • :详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • :总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • :总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

1.什么是 PriorityQueue?

队列是遵循先进先出(First-In-First-Out)模式的,但有时需要在队列中基于优先级处理对象。

Queue 有一个直接子类 PriorityQueue

PriorityQueue 是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的 Comparator(比较器)在队列实例化的时排序。

  • 优先队列的头是基于自然排序或者 Comparator 排序的最小元素。如果有多个对象拥有同样的排序,那么就可能随机地取其中任意一个。当我们获取队列时,返回队列的头对象。
  • 优先队列的大小是不受限制的,但在创建时可以指定初始大小。当我们向优先队列增加元素的时候,队列大小会自动增加。
  • PriorityQueue 是非线程安全的,所以 Java 提供了 PriorityBlockingQueue(实现 BlockingQueue 接口)用于 Java 多线程环境。

PriorityQueue 的底层数据结构是数组,而无边界的形容,那么指明了 PriorityQueue 是自带扩容机制的,具体请看 PriorityQueue 的 grow 方法。

PriorityQueue 可以作为堆使用,而且可以根据传入的 Comparator 实现大小的调整,会是一个很好的选择。

2.PriorityQueue 特点

按照自定义优先级排序

  • PriorityQueue 是一个支持优先级的无界阻塞队列;
  • 默认自然顺序升序排序;
  • 可以通过构造参数 Comparator 来对元素进行排序;
  • 自定义实现 comapreTo()方法来指定元素排序规则。
  • 不允许插入 null 元素。
  • 实现 PriorityQueue 接口的类,不保证线程安全,除非是 PriorityBlockingQueue。
  • PriorityQueue 的迭代器不能保证以任何特定顺序遍历元素,如果需要有序遍历,请考虑使用 Arrays.sort(pq.toArray)
  • 进列( offeradd )和出列( pollremove() )的时间复杂度 O(log(n))。
  • remove(Object) 和 contains(Object)的算法时间复杂度 O(n)。
  • peek、element、size 的算法时间复杂度为 O(1)。
public PriorityQueue(Comparator<? super E> comparator) {
     this(DEFAULT_INITIAL_CAPACITY, comparator);
}

3.PriorityQueue 继承与实现

PriorityQueue类继承了哪些类:

  • AbstractQueue 抽象类,具有队列的功能

PriorityQueue类实现了哪些接口:

  • Queue 接口,可作为队列使用。

觉得有用的话点个赞 👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

https://i-blog.csdnimg.cn/blog_migrate/101469850485989da7dda6f53e80e19d.gif#pic_center