优先队列 PriorityQueue 实现的五大关键点

在这里插入图片描述

我们飞得越高,在那些不能飞的人眼中的形象就越是渺小。
 --- 尼采

Q:了解PriorityQueue吗?

 那必须了解,不了解这次面试就凉了。套路走起。

基于优先级堆的无界优先级队列。根据使用的构造方法,优先级队列的元素
在这里插入图片描述

  • 根据其自然顺序进行排序
    在这里插入图片描述
  • 或通过在队列构建时提供的Comparator进行排序
    在这里插入图片描述
  • 注意到其中的默认初始容量参数 - DEFAULT_INITIAL_CAPACITY
    在这里插入图片描述

PriorityQueue不允许空元素。依赖自然顺序的优先级队列也不允许插入不可比较(也就是说,必须实现Comparable接口)的对象(这样做可能会导致ClassCastException)。

就指定顺序而言,队首是最小的元素。如果多个元素的值都最小,那么队首就是那些元素之一。队列检索操作poll,remove,peek都是访问队首元素。

PriorityQueue是无界的,但是具有内部容量来控制用于在队列上存储元素的数组的大小
在这里插入图片描述
它至少与队列大小一样大。将元素添加到PriorityQueue时,其容量会自动扩容。扩容策略并未详细指定,可自行设计。

此类及其迭代器实现Collection和Iterator接口的所有可选方法。不保证方法iterator()中提供的Iterator以任何特定的顺序遍历元素。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。

请注意,此实现并未同步。如果任何线程修改了队列,则多线程不应同时访问PriorityQueue实例。而是使用线程安全的PriorityBlockingQueue类。

此实现为

  • 入队和出队方法(offer,poll,remove,add方法提供O(log(n))性能
  • remove(Object),contains(Object) 线性时间
  • 常量时间的检索方法:
    peek

    size

此类也是Java Collections Framework的成员。 最早在 JDK1.5 提供,由Josh Bloch, Doug Le

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java源码模拟面试解析指南 文章被收录于专栏

<p> “挨踢”业行情日益严峻,企业招聘门槛愈来愈高,大厂hc更是少之又少,而Java技术面试普遍对基础知识的掌握考察特别深,大多数同学突击所看的 Java 面试基础知识点根本达不到面试官近乎挑剔的要求。 本专刊针对如今的校招及社招痛点,深入解析 JDK 的核心源码,探究 JDK 的设计精髓及最佳实践,同时以模拟面试的场景切入,让同学们在阅读过程中也能轻松掌握面试技巧。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p>

全部评论
容量较小时新容量应该是 (old + 1) * 2 也就是翻倍才对吧
点赞 回复 分享
发布于 2021-02-23 21:03

相关推荐

09-29 00:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务