PriorityQueue的用法和底層實現原理
阿新 • • 發佈:2021-12-08
定義
PriorityQueue類在Java1.5中引入並作為 Java Collections Framework 的一部分。PriorityQueue是基於優先堆的一個無界佇列,這個優先佇列中的元素可以預設自然排序或者通過提供的Comparator(比較器)在佇列例項化的時排序。
優先佇列不允許空值,而且不支援non-comparable(不可比較)的物件,比如使用者自定義的類。優先佇列要求使用Java Comparable和Comparator介面給物件排序,並且在排序時會按照優先順序處理其中的元素。
PriorityQueue是非執行緒安全的,所以Java提供了PriorityBlockingQueue(實現BlockingQueue介面)用於Java多執行緒環境。
案例程式碼
- 小根堆
/** * @Description: 小根堆 * @Author: * @Date: 2021-12-08 * @Param: * @return: **/ public void smallHeap(){ PriorityQueue<Integer> priorityQueue=new PriorityQueue(); priorityQueue.add(1); priorityQueue.add(2); priorityQueue.add(9); priorityQueue.add(4); priorityQueue.add(8); priorityQueue.add(0); while (!priorityQueue.isEmpty()){ System.out.println(priorityQueue.poll()); } } //輸出 0 1 2 4 8 9
- 大根堆
/** * @Description: 大根堆 * @Author: * @Date: 2021-12-08 * @Param: * @return: **/ public void bigHeap(){ PriorityQueue<Integer> priorityQueue=new PriorityQueue(new MyComparator()); priorityQueue.add(13); priorityQueue.add(2); priorityQueue.add(9); priorityQueue.add(663); priorityQueue.add(8); priorityQueue.add(0); while (!priorityQueue.isEmpty()){ System.out.println(priorityQueue.poll()); } } //輸出 663 13 9 8 2 0
圖列
- 小根堆
XFS堆頂元素一定為該完全二叉樹所有節點最小元素;任意一個非葉子節點的權值,都不大於其左右子節點的權值。