使用priorityQueue的java heapify方法

标签 java heap priority-queue

我在我的java程序中使用priorityQueue作为最大堆实现。现在我需要对创建的堆进行堆化以计算最大值。看来priorityQueue没有实现heapify方法。所以我的问题是是否有使用priorityQueue 来处理这个问题?如果没有,java中是否有可靠的具有heapify方法的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());
                }
            });

假设“节点”对象的 marginGain 值发生了变化,该对象是“客户”类型。 一种解决方案是

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

但是有一个问题:

  • 它给我的程序增加了一些额外的延迟。我希望尽可能高效。

最佳答案

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

因此,只需在队列中添加/删除元素即可
假设最大元素位于位置 0(在根)。

关于使用priorityQueue的java heapify方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21985370/

相关文章:

Java/PriorityQueue 和线程

c++ - 将 std::multimap 转换为 std::priority_queue

java - 模块化 JMeter 测试?

java - 如何从 servlet 验证连接是使用双向 SSL 建立的?

java - 如何在ZK中的TreeNode结构中选择树节点?

c++ - 我将如何编辑此代码以使最小堆成为可能?

java - HeapSort 算法索引从 1 到 n,实际代码必须从 0 到 n-1

java - Android 单元测试和全局静态变量

python - 添加新元素时 Heapify 不起作用

Java:从匿名内部类访问局部变量? (优先队列)