??個人主頁:Ice_Sugar_7
??所屬專欄:Java數(shù)據(jù)結(jié)構(gòu)
??歡迎點贊收藏加關(guān)注哦!
??前言
優(yōu)先級隊列底層是用堆實現(xiàn)的,關(guān)于堆的實現(xiàn),之前的文章已經(jīng)詳細介紹過了,文章鏈接:二叉樹1:堆的實現(xiàn)
??構(gòu)造方法
方法 | 功能 |
---|---|
PriorityQueue() | 創(chuàng)建一個空的優(yōu)先級隊列,默認容量是11 |
PriorityQueue(int initialCapacity) | 創(chuàng)建一個初始容量為initialCapacity的優(yōu)先級隊列(注意:initialCapacity不能小于1,否則會拋IllegalArgumentException異常) |
PriorityQueue(Collection<? extends E> c) | 將一個包含指定類型元素的集合c添加到新建的PriorityQueue中 |
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) | 使用比較器來初始化PriorityQueue(可以不傳initialCapacity,此時使用默認容量) |
注意:要將自定義類型的對象存放到PriorityQueue時,通常需要傳入一個比較器,重寫compare方法來定義對象之間的優(yōu)先級順序文章來源:http://www.zghlxwxcb.cn/news/detail-829178.html
在Java中,PriorityQueue默認是小堆
,如果要將其轉(zhuǎn)化為大堆,就要用比較器初始化PriorityQueue文章來源地址http://www.zghlxwxcb.cn/news/detail-829178.html
public class MaxHeapExample {
public static void main(String[] args) {
// 創(chuàng)建一個Comparator,定義從大到小的比較規(guī)則
Comparator<Integer> maxHeapComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; // 從大到小排序
}
};
// 使用maxHeapComparator創(chuàng)建一個大堆PriorityQueue
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(maxHeapComparator);
// 向大堆中添加元素
maxHeap.add(3);
maxHeap.add(1);
maxHeap.add(5);
maxHeap.add(2);
// 此時PriorityQueue中的元素將按照大堆的規(guī)則排列
// 輸出:[5, 3, 1, 2]
System.out.println(maxHeap);
}
}
??基本方法
方法 | 功能 |
---|---|
boolean offer(E e) | 插入元素e,插入成功返回true。如果e對象為空,則拋出NullPointerException異常(即不能插入null) |
E peek() | 獲取優(yōu)先級最高的元素(就是堆頂元素),如果優(yōu)先級隊列為空,返回null |
E poll() | 移除優(yōu)先級最高的元素并返回,如果優(yōu)先級隊列為空,返回null |
int size() | 獲取有效元素的個數(shù) |
void clear() | 清空 |
boolean isEmpty() | 檢測優(yōu)先級隊列是否為空,若為空,則返回true |
??注意事項
- PriorityQueue中放置的元素必須要能夠比較大小,不能插入無法比較大小的對象,否則會拋出ClassCastException異常
- 不能插入null對象,否則會拋出NullPointerException
- 沒有容量限制,可以插入任意多個元素,因為其內(nèi)部可以自動擴容
- 插入和刪除元素的時間復(fù)雜度為
O(logN)
- PriorityQueue默認情況下是
小堆
——即每次獲取到的元素都是最小的元素
到了這里,關(guān)于「數(shù)據(jù)結(jié)構(gòu)」優(yōu)先級隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!