1. 程式人生 > 其它 >PriorityQueue的用法和底層實現原理

PriorityQueue的用法和底層實現原理

定義

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