(数据结构):优先级队列(Priority Queue)
程序员文章站
2022-12-12 15:48:08
目录优先级队列(Priority Queue)优先级队列应用场景优先队列的底层实现(附代码)优先级队列(Priority Queue)接口:public interface Queue {int size();// 元素的数量boolean isEmpty();// 是否为空void enQueue(E element);// 入队E deQueue();// 出队E front();// 获取队列的头元素void cle...
目录
优先级队列(Priority Queue)
- 接口:
public interface Queue<E> { int size(); // 元素的数量 boolean isEmpty(); // 是否为空 void enQueue(E element); // 入队 E deQueue(); // 出队 E front(); // 获取队列的头元素 void clear(); // 清空 }
优先级队列应用场景
- 医院的夜间门诊
- 队列元素是病人
- 优先级是病情的严重情况、挂号时间
- 操作系统的多任务调度
- 队列元素是任务
- 优先级是任务类型
优先队列的底层实现(附代码)
- 利用二叉堆作为优先队列的底层实现。
- 利用 Comparator 或 Comparable 去自定义优先级高低。
/** * 二叉堆实现优先级队列 * @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; } @Override public int compareTo(Person person) { return this.boneBreak - person.boneBreak; } @Override public 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]
本文地址:https://blog.csdn.net/baidu_41388533/article/details/110501958
下一篇: 给这位小姐换双筷子