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