【发布时间】:2021-11-28 05:58:17
【问题描述】:
一般来说,如果我理解正确,“heapifying;o(n)”给定列表与添加每个单独元素之间存在运行时差异; o(lg n)。 java是否遵循这种行为?如果不是以下问题可能无效。
以下示例似乎创建了一个“最小堆”。
List<Integer> myList = List.of(4,3,10,1);
PriorityQueue<Integer> queue = new PriorityQueue<>(myList);
但是,假设我想构建一个“最大堆”,但构造函数不允许我一起传入集合和比较器。在这种情况下,构建最大堆的唯一方法是创建一个实现可比较的包装类吗?
class Wrapper implements Comparable<Wrapper> {
...
@Override
int compareTo(Wrapper o) {// define rule here...}
}
List<Integer> val = List.of(5,3,2,10);
List<Wrapper> wrappedVal = val.stream().map(Wrapper::new).collect(Collectors.toList());
PriorityQueue<Wrapper> queue = new PriorityQueue<>(wrappedVal);
注意:我知道可以使用比较器创建优先级队列,然后重复调用 add。
【问题讨论】:
标签: java priority-queue