Java中有堆吗?

2022-08-31 09:21:43

我正在将一个C++库移植到Java,我需要一个堆数据结构。是否有标准实现,或者我需要自己做吗?


答案 1

对于 Java 8,更新现有答案

您可以将 Java 优先级队列用作堆。

最小堆: -->保持最小元素始终在顶部, 所以你可以在 O(1) 中访问它。

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

最大堆: -->使 max 元素始终位于顶部,顺序与上述顺序相同。

PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());

这与其他答案相同或建议。(Integer o1, Integer o2) -> Integer.compare(o2, o1)- Integer.compare(o1, o2)

您可以使用:
-->将元素添加到队列中。O(log n)
-->获取并删除最小值/最大值 O(log n)
-->获取,但不删除最小值/最大值 O(1)addremovepeek


答案 2

最小堆:

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

最大堆数:

PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return - Integer.compare(o1, o2);
    }
});

推荐