使用priorityQueue的java heapify方法

时间:2014-02-24 10:39:58

标签: java heap priority-queue

我在我的java程序中使用priorityQueue作为最大堆实现。现在我需要堆积创建的堆来计算最大值。似乎priorityQueue没有实现heapify方法。所以我的问题是,无论如何使用priorityQueue处理这个问题?如果不是,在具有heapify方法的java中是否有可靠的Max-heap实现?请注意,我的程序使用自己的比较器。所以这个实现应该支持。

更多解释:

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 个答案:

答案 0 :(得分:1)

优先级队列已经是堆,因此它不需要heapify方法 这种方法通常在不是堆的结构上实现。

所以只需在队列中添加/删除元素,然后只需添加 假设您在位置0处(在根处)具有最大元素。