优先级队列的使用[通俗易懂]

优先级队列的使用[通俗易懂]优先级队列(priorityqueue)中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说,无论何时调用remove方法,总会获得当前优先级队列中最小的元素.然后,优先级队列并没有对所有的元素进行排序。如果用迭代的方式处理这些元素,并不需要对它们进行排序。优先级队列使用了一个优雅且高效的数据结构,称为堆(heap)。堆事一个可以自我调整的二叉树,对树执行添加(add)和删除(

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

   优先级队列(priority queue)中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说,无论何时调用remove方法,总会获得当前优先级队列中最小的元素.然后,优先级队列并没有对所有的元素进行排序。如果用迭代的方式处理这些元素,并不需要对它们进行排序。优先级队列使用了一个优雅且高效的数据结构,称为堆(heap)。堆事一个可以自我调整的二叉树,对树执行添加(add)和删除(remove)操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。

   使用优先级队列的典型示例是任务调度。每一个任务都有一个优先级,任务以随机顺序添加到队列中。

  PriorityQueue<GregorianCalendar> pq = new PriorityQueue<GregorianCalendar>();
         pq.add(new GregorianCalendar(1906,Calendar.DECEMBER,9));
         pq.add(new GregorianCalendar(1815,Calendar.DECEMBER,10));
         pq.add(new GregorianCalendar(1903,Calendar.DECEMBER,3));
         pq.add(new GregorianCalendar(1910,Calendar.JUNE,22));
         
         System.out.println(“Iterating over elements。。。”);
         for(GregorianCalendar date :pq){

             System.out.println(date.get(Calendar.YEAR));
         }
         System.out.println(“Removing elements。。。”);
         while(!pq.isEmpty())
             System.out.println(pq.remove().get(Calendar.YEAR));
         
    }

 控制台显示:

Iterating over elements。。。
1815
1906
1903
1910
Removing elements。。。
1815
1903
1906
1910

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193055.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月2日 下午11:22
下一篇 2025年12月3日 上午7:01


相关推荐

  • C语言_宏定义

    C语言_宏定义一 预处理 编译一个 C 语言程序的第一步骤就是预处理阶段 这一阶段就是宏发挥作用的阶段 C 预处理器在源代码编译之前对其进行一些文本性质的操作 主要任务包括删除注释 插入被 include 进来的文件内容 定义和替换由 define 定义的符号以及确定代码部分内容是否根据条件编译 if 来进行编译 文本性质 的操作 就是指一段文本替换成另外一段文本 而不考虑其中任何的语义内容 宏仅仅是在 C 预

    2026年3月20日
    2
  • 心形函数的几种表达式怎么求_心形曲线函数4种表达式

    心形函数的几种表达式怎么求_心形曲线函数4种表达式用两个函数表示:f(x)=sqrt(1-(abs(x)-1)^2)h(x)=-2*sqrt(1-0.5*abs(x))也可以根据图中的q(x)画出心形的内部:q(x)=(f(x)-h(x))/2*cos(200*x)+(f(x)+h(x))/2用一个函数表示,我拟合了很久才画出来的:f(x)=(0.64*sqrt(abs(x))-0.8+1.2^abs(x)*cos(200*x))*sqrt(cos(x))定义域:-pi/2<=x<=pi/2我个人觉得要比

    2022年10月9日
    6
  • 操作系统简介重点摘要

    操作系统简介重点摘要

    2022年1月11日
    60
  • 嵌入式ARM开发板11/20

    嵌入式ARM开发板11/20STM32 芯片系统结构四个驱动单元 Icode Dcode System DMA 指令总线 Icode 数据总线 Dcode 将 Cortex M3 和 Flash SRAM 进行连接加载用 const 修饰 若用 c 语言 常量 Flash 加载调试变量 SRAM 总线矩阵 连接 Dcode 和 Flash SRAM 决定 Dcode 访问 Flash 接口还是 SRAM 连接 System 决定对哪个进行操作连

    2026年3月16日
    2
  • 程序员最强AI画图工具大全!

    程序员最强AI画图工具大全!

    2026年3月15日
    3
  • QDialog 简介

    转载自https://blog.csdn.net/jia666666/article/details/81539733 前言为了更好的实现人机交互,比如window和linux等系统均会提供一系列的标准对话框来完成特定场景下的功能,比如选择字号大小。字体颜色等,在PyQt5中定义了一系列的标准对话框类,让使用者能够方便快捷地通过各个类完成字号大小,字体颜色以及文件的选择等QD…

    2022年4月9日
    82

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号