PriorityQueue
瞭解其他JAVA 常用API和算法點這裏 >> https://blog.csdn.net/GD_ONE/article/details/104061907
PriorityQueue
翻譯過來就是優先隊列,本質是一個堆, 默認情況下堆頂每次都保留最小值,每插入一個元素,仍動態維護堆頂爲最小值。
初始化
PriorityQueue()
//使用默認的初始容量(11)創建一個 PriorityQueue,並根據其自然順序對元素進行排序。
PriorityQueue<Integer> Q = new PriorityQueue<>(); // 初始化
常用函數
add(E e)
//將指定的元素插入此優先級隊列。
clear()
//清空
contains(Object o)
// 如果包含指定元素返回true
iterator()
//返回在此隊列中的元素上進行迭代的迭代器。
offer(E e)
// 將指定元素插入此優先隊列
peek()
// 獲取第一個元素,及最小或最大元素
poll()
// 獲取並移除第一個
remove(Object o)
// 移除指定元素
size()
// 返回元素個數
實現大根堆的兩種方式
因爲java中的優先隊列默認是小根堆,要實現大根堆可以用以下兩種方法:
- 使用自定義比較器
- 將所有數據變爲之前自身的負數之後在插入, 因爲添加個負號就相當於是逆序了嘛。1 < 2 < 3 取負之後變爲 -1 > - 2 > - 3
實例
public static void main(String[] args){
Scanner in = new Scanner(new InputStreamReader(System.in));
PriorityQueue<Integer> Q = new PriorityQueue<>();
int a;
for(int i = 0; i < 10; i++){
a = in.nextInt();
Q.add(a);
System.out.print(Q.peek()+" ");// 輸出當前隊列的最小元素
}
}
輸入: 1 -1 -2 -3 10 -4 -5 -6 -7 -8
輸出: 1 -1 -2 -3 -3 -4 -5 -6 -7 -8