一、優(yōu)先級(jí)隊(duì)列(Priority Queue)
普通的隊(duì)列是先進(jìn)先出原則。
優(yōu)先級(jí)隊(duì)列是按照優(yōu)先級(jí)高低進(jìn)行出隊(duì),比如將優(yōu)先級(jí)最高的元素作為隊(duì)頭優(yōu)先出隊(duì)。
使用場(chǎng)景:
醫(yī)院急診根據(jù)病人病情和掛號(hào)時(shí)間決定誰(shuí)先看病。
操作系統(tǒng)的多任務(wù)調(diào)度,隊(duì)列元素是任務(wù),優(yōu)先級(jí)是任務(wù)類型。
二、優(yōu)先級(jí)隊(duì)列(Priority Queue)底層實(shí)現(xiàn)
通過(guò)最大堆來(lái)實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列。
public class PriorityQueue<E> {
private BinaryHeap<E> heap; // 二叉堆
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); //入隊(duì)
}
public E deQueue() {
return heap.remove(); //讓優(yōu)先級(jí)最高的元素出隊(duì)
}
public E front() {
return heap.get(); //獲取堆頂元素
}
}