2014-02-24 68 views
1

我在我的java程序中使用了priorityQueue作爲最大堆實現。現在我需要堆積創建的堆來計算最大值。看來priorityQueue沒有實現heapify方法。所以我的問題是有無論如何使用priorityQueue來處理這個問題?如果不是,有什麼可靠的實現最大堆在Java中heapify方法?請注意我的程序使用自己的比較器。所以這個實現應該支持。java heapify method using priorityQueue

一些更多的解釋:

PriorityQueue<Customer> marginalGainHeap = new PriorityQueue<Customer>(
      1, new Comparator<Customer>() { 
       public int compare(Customer c1, Customer c2) { 
        return Double.compare(c1.getMarginalGain(), 
          c2.getMarginalGain()); 
       } 
      }); 

假設改變「節點」對象,其是一種類型的「客戶」的marginalGain值。 一個解決辦法是

marginalGainHeap.remove(node) 
marginalGainHeap.add(node) 

,但有一個問題:

  • 它增加了一些額外的延遲我的計劃。我希望儘可能高效。
+1

你想做什麼,爲什麼? – immibis

+0

所以如果它是優先級隊列,那麼你在隊列的開始(或結束)有最大值? – FazoM

+0

我要檢索更新堆中的某些值並檢索最大值(根) –

回答

1

優先級隊列已經是堆,所以它不需要heapify方法。
該方法通常在不是堆的結構上實現。

所以,只需在您的隊列中添加/刪除元素,只需
假設您在位置0(位於根部)具有最大元素。

+0

如何刪除該值?首先我需要找到該值,以便此過程在運行時會增加一些延遲。順便說一句,有什麼方法可以處理這種情況? –

+0

查看方法調查和報價。 http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html –

+0

@Alin你可以poll()一個隊列來移除一個元素。 –