优先级队列(Priority Queue)

  • 优先级队列简介
  • 优先队列的底层实现
  • 二叉堆实现优先级队列源码
  • 测试代码

数据结构与算法笔记目录:《恋上数据结构》 笔记目录

想加深 Java 基础推荐看这个: Java 强化笔记目录

优先级队列简介

优先级队列也是个队列,因此也提供以下接口:

public interface Queue<E> {int size(); // 元素的数量boolean isEmpty();  // 是否为空void enQueue(E element); // 入队E deQueue();   // 出队E front(); // 获取队列的头元素void clear();    // 清空
}


队列与优先级队列对比

  • 普通的队列是 FIFO 原则,也就是先进先出
  • 优先级队列则是按照优先级高低进行出队,
    比如将优先级最高的元素作为队头优先出队。

优先级队列应用场景

  • 医院的夜间门诊
    队列元素是病人
    优先级是病情的严重情况、挂号时间
  • 操作系统的多任务调度
    队列元素是任务
    优先级是任务类型

优先队列的底层实现

  • 利用二叉堆作为优先队列的底层实现
  • 可以通过 ComparatorComparable自定义优先级高低

二叉堆实现优先级队列源码

利用二叉堆实现优先级队列。

/*** 二叉堆实现优先级队列* @author yusael*/
public class PriorityQueue<E> {private BinaryHeap<E> heap;// 通过 comparator 自定义优先级高低public PriorityQueue(Comparator<E> comparator) {heap = new BinaryHeap<>(comparator);}public PriorityQueue() {this(null);}public int size() {return heap.size();}public boolean isEmpty() {return heap.isEmpty();}public void clear() {heap.clear();}public void enQueue(E element) {heap.add(element);}public E deQueue() {return heap.remove();}public E front() {return heap.get();}
}

测试代码

Person.java

public class Person implements Comparable<Person> {private String name;private int boneBreak;public Person(String name, int boneBreak) {this.name = name;this.boneBreak = boneBreak;}@Overridepublic int compareTo(Person person) {return this.boneBreak - person.boneBreak;}@Overridepublic String toString() {return "Person [name=" + name + ", boneBreak=" + boneBreak + "]";}
}

Main.java

 public class Main {public static void main(String[] args) {PriorityQueue<Person> queue = new PriorityQueue<>();queue.enQueue(new Person("Jack", 2));queue.enQueue(new Person("Rose", 10));queue.enQueue(new Person("Jake", 5));queue.enQueue(new Person("James", 15));while (!queue.isEmpty()) {System.out.println(queue.deQueue());}}
}
Person [name=James, boneBreak=15]
Person [name=Rose, boneBreak=10]
Person [name=Jake, boneBreak=5]
Person [name=Jack, boneBreak=2]

《恋上数据结构第1季》二叉堆实现优先级队列相关推荐

  1. 《恋上数据结构第1季》二叉搜索树BST

    二叉搜索树(BinarySearchTree) BST 接口设计 BST 基础 添加元素: add() 删除元素: remove() 删除节点 – 叶子节点 删除节点 – 度为1的节点 删除节点 – ...

  2. 《恋上数据结构第1季》动态数组实现栈

    栈(Stack) 栈的应用 – 浏览器的前进和后退 栈的接口设计 动态数组实现栈 练习题 逆波兰表达式求值 有效的括号 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java ...

  3. 42. 盘点那些必问的数据结构算法题之二叉堆

    盘点那些必问的数据结构算法题之二叉堆 0 概述 1 二叉堆定义 2 保持堆的性质 3 建立最大堆 4 堆排序 5 优先级队列 参考资料 0 概述 本文要描述的堆是二叉堆.二叉堆是一种数组对象,可以被视 ...

  4. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

  5. 《恋上数据结构第1季》平衡二叉搜索树、AVL树

    AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...

  6. 《恋上数据结构第1季》B树

    B树 m阶B树的性质 B树 vs 二叉搜索树 搜索 添加 – 上溢 添加 – 上溢的解决(假设5阶) 删除 删除 – 叶子节点 删除 – 非叶子节点 删除 – 下溢 删除 – 下溢的解决 4阶B树 数 ...

  7. 《恋上数据结构第1季》二叉树代码实现

    二叉树(BinaryTree) BinaryTree 基础 遍历(先序.中序.后序.层次遍历) 先序遍历: preorder() 中序遍历: inorder() 后序遍历: postorder() 层 ...

  8. 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)

    二叉树(Binary Tree) 树(Tree)的基本概念 有序树.无序树.森林 二叉树(Binary Tree) 二叉树的性质 真二叉树(Proper Binary Tree) 满二叉树(Full ...

  9. 《恋上数据结构第1季》映射 TreeMap,HashMap,LinkedHashMap

    映射 Map Map的接口定义 Map.java 红黑树 RBTree 实现 TreeMap TreeMap 分析 哈希表实现 HashMap HashMap 升级为 LinkedHashMap 数据 ...

最新文章

  1. win10系统80端口被System (PID=4)占用的解决
  2. IxRmhOECiP
  3. VS与QT的路径查找差异
  4. 那个成人总会遇到的小问题……
  5. Linux学习笔记15—RPM包的安装OR源码包的安装
  6. 将List集合用字符串,逗号隔开进行拼接 ,五种方法
  7. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
  8. python里怎么读取文件-python怎么读取文本文件
  9. iOS 刘海屏 隐藏横条 home键
  10. java db4o,有用过db4O的吗?
  11. LED背光源和LED背光灯区别
  12. win7定时关机命令_磨刀三分钟 | 以【设置定时关机】为例,学会计算机界的如来神掌第1式...
  13. 实验9-10 平面向量加法 (15 分)
  14. Chrome开发者工具-阅读列表
  15. mysql数据库在线测试_测试面试题集-MySQL数据库灵魂拷问
  16. JBPM工作流(二)——数据库表说明
  17. batch批处理小记
  18. 用手机打开word图表位置很乱_word排版技巧:论文图表目录制作步骤
  19. iOS开发基础知识--碎片37
  20. Unity 游戏框架搭建 2019 (四十五) 独立的方法和独立的类

热门文章

  1. 社区团购如今进行得如火如荼
  2. ios如何清理缓存?
  3. 下一个十年,互联网升级的大致方向在哪里?
  4. 为什么阿里巴巴的市值比京东高,世界500排名比京东靠后?
  5. Golang实现Server和Client的TCP通讯
  6. 服务注册不进eureka
  7. Oracle :备份 、还原数据库
  8. sublime text3 Package Control 插件安装及推荐(MAC)
  9. 多线程蜂鸣器研究,友善之臂Smart210开发版
  10. 标准C程序设计七---120