【Java】 用PriorityQueue實現最大最小堆


PriorityQueue(優先隊列),一個基於優先級堆的無界優先級隊列

實際上是一個堆(不指定Comparator時默認為最小堆),通過傳入自定義的Comparator函數可以實現大頂堆。

    PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(); //小頂堆,默認容量為11
    PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){ //大頂堆,容量11
        @Override
        public int compare(Integer i1,Integer i2){
            return i2-i1;
        }
    });

 

  案例: 劍指offer(41) 最小的k個數

PriorityQueue的常用方法有:poll(),offer(Object),size(),peek()等。

  •   插入方法(offer()、poll()、remove() 、add() 方法)時間復雜度為O(log(n)) ;
  •   remove(Object) 和 contains(Object) 時間復雜度為O(n);
  •   檢索方法(peek、element 和 size)時間復雜度為常量。

 

 PriorityQueue的API文檔說明:

構造方法摘要
PriorityQueue()
          使用默認的初始容量(11)創建一個 PriorityQueue,並根據其自然順序對元素進行排序。
PriorityQueue(Collection<? extends E> c)
          創建包含指定 collection 中元素的 PriorityQueue
PriorityQueue(int initialCapacity)
          使用指定的初始容量創建一個 PriorityQueue,並根據其自然順序對元素進行排序。
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
          使用指定的初始容量創建一個 PriorityQueue,並根據指定的比較器對元素進行排序。
PriorityQueue(PriorityQueue<? extends E> c)
          創建包含指定優先級隊列元素的 PriorityQueue
PriorityQueue(SortedSet<? extends E> c)
          創建包含指定有序 set 元素的 PriorityQueue

 

方法摘要
 boolean add(E e)
          將指定的元素插入此優先級隊列。
 void clear()
          從此優先級隊列中移除所有元素。
 Comparator<? super E> comparator()
          返回用來對此隊列中的元素進行排序的比較器;如果此隊列根據其元素的自然順序進行排序,則返回 null
 boolean contains(Object o)
          如果此隊列包含指定的元素,則返回 true
 Iterator<E> iterator()
          返回在此隊列中的元素上進行迭代的迭代器。
 boolean offer(E e)
          將指定的元素插入此優先級隊列。
 E peek()
          獲取但不移除此隊列的頭;如果此隊列為空,則返回 null
 E poll()
          獲取並移除此隊列的頭,如果此隊列為空,則返回 null
 boolean remove(Object o)
          從此隊列中移除指定元素的單個實例(如果存在)。
 int size()
          返回此 collection 中的元素數。
 Object[] toArray()
          返回一個包含此隊列所有元素的數組。
<T> T[]
toArray(T[] a)
          返回一個包含此隊列所有元素的數組;返回數組的運行時類型是指定數組的類型。


從類 java.util.AbstractQueue 繼承的方法
addAll, element, remove


從類 java.util.AbstractCollection 繼承的方法
containsAll, isEmpty, removeAll, retainAll, toString


從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

 

從接口 java.util.Collection 繼承的方法
containsAll, equals, hashCode, isEmpty, removeAll, retainAll


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM