尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java 数据结构 优先级队列(堆)

Java 数据结构 优先级队列(堆)
📅 发布时间:2026/7/26 23:39:54

目录

常用方法

常⽤接⼝介绍


常用方法

常⽤接⼝介绍

于PriorityQueue的使⽤要注意:

1. PriorityQueue中放置的元素必须要能够⽐较⼤⼩,不能插⼊⽆法⽐较⼤⼩的对象,否则会抛出 ClassCastException异常

2. 不能插⼊null对象,否则会抛出NullPointerException

3. 没有容量限制,可以插⼊任意多个元素,其内部可以⾃动扩容

4. 插⼊和删除元素的时间复杂度为

5. PriorityQueue底层使⽤了堆数据结构

6. PriorityQueue默认情况下是⼩堆---即每次获取到的元素都是最⼩的元素

优先级队列的构造

// 创建⼀个空的优先级队列,底层默认容量是11 PriorityQueue<Integer> q1 = new PriorityQueue<>(); // 创建⼀个空的优先级队列,底层的容量为initialCapacity PriorityQueue<Integer> q2 = new PriorityQueue<>(100); // // list中已经包含了三个元素 PriorityQueue<Integer> q3 = new PriorityQueue<>(list);

三种构造方法的底层调用:

public PriorityQueue() { this(DEFAULT_INITIAL_CAPACITY, null); } //this调用 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; }

插入元素的底层调用:

注意offer调用,siftUp调用,siftUpComparable调用

q1.offer(10); // public boolean offer(E e) { if (e == null) throw new NullPointerException(); modCount++; int i = size; if (i >= queue.length) grow(i + 1); siftUp(i, e); size = i + 1; return true; } // siftUp的底层调用 private void siftUp(int k, E x) { if (comparator != null) siftUpUsingComparator(k, x, queue, comparator); else siftUpComparable(k, x, queue); } // siftUpComparable的底层调用 private static <T> void siftUpComparable(int k, T x, Object[] es) { //强转至<>中的类型 Comparable<? super T> key = (Comparable<? super T>) x; while (k > 0) { int parent = (k - 1) >>> 1; Object e = es[parent]; if (key.compareTo((T) e) >= 0) break; es[k] = e; k = parent; } es[k] = key; }

注意:默认情况下,PriorityQueue队列是⼩堆,如果需要⼤堆需要⽤⼾提供⽐较器

// ⽤⼾⾃⼰定义的⽐较器:直接实现Comparator接⼝,然后重写该接⼝中的 compare⽅法即可 // class IntCmp implements Comparator<Integer>{ @Override public int compare(Integer o1, Integer o2) { return o2-o1; } } public class TestPriorityQueue { public static void main(String[] args) { PriorityQueue<Integer> p = new PriorityQueue<>(new IntCmp()); p.offer(4); p.offer(3); p.offer(2); p.offer(1); p.offer(5); System.out.println(p.peek()); } }

相关新闻

  • 中国细瓷市场现状调查分析及未来竞争态势预测报告2026年版
  • 2026 年当下,仙游优秀的二手托盘交易供货厂家哪家强,揭秘:别再扔掉你的旧托盘了!-易辰重型设备包装 - 企业推荐官【认证官方】
  • 2026年7月湖南省郴州市电信300M单宽带攻略与避坑指南 - 找卡家园

最新新闻

  • 放飞炬人集团行政总裁方达炬批准筹备 宇航工业公司 专门大规模高质量制造轰炸机、强人工智能战斗机、宇航器、全隐身运输机、战斗无人机、空天飞机、光子通信侦察机、拦截卫星轨道导弹攻击机。
  • 2026零基础转行网安真心话:没基础、非科班,普通人到底能不能弯道超车?
  • 2026年温州品牌策划设计公司推荐全维度实用指南 - 热点品牌推荐
  • 2026年东莞出发去迭部县旅游高口碑旅行社选择指南 - 热点品牌推荐
  • 公务员培训电话查询方法与优质公考备考机构选择指南 - 热点品牌推荐
  • Midscene:3大核心技术优势重塑跨平台AI自动化测试体验

日新闻

  • OpenClaw开源智能体网关:AI助手与即时通讯的完美融合
  • 写一个简单的sh脚本
  • 2026年 西安缝隙天线厂家:5G通信与车载天线专业定制供应商深度分析 - 卓企推荐

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号