如何在java中使用优先级队列将一个数组列表转换为最大堆。

问题描述 投票:0回答:2

我知道我们可以使用优先级队列使用Collections.reverseOrder()创建一个最大堆,但我需要在那个地方也传递ArrayList。我试着创建一个自定义的比较器以备不时之需,但似乎并不奏效。我想知道这样做的具体语法。例子我的知识:1)创建一个空的最小堆-> PriorityQueue pqmin = new PriorityQueue(); 2)从ArrayList arr创建一个最小堆-> PriorityQueue pqmin = new PriorityQueue(arr); 3)创建一个空的最大堆-> PriorityQueue pqmax = new PriorityQueue(Collections.reverseOrder())。

我的问题是 如何在Java中使用priorityQueue从现有的arrayList中创建最大堆?

java syntax priority-queue max-heap
2个回答
1
投票

没有这样的构造函数 PriorityQueue 的,既需要一个集合又需要一个比较器。

但你可以使用 addAll 方法。

PriorityQueue pqmax = new PriorityQueue(Collections.reverseOrder());
pqmax.addAll(arr);

1
投票

使用3),然后 addAll. 或者稍微好一点的是通过初始容量

 PriorityQueue pqmax = new PriorityQueue(arr.size(), Collections.reverseOrder()); 
 pqmax.addAll(arr);
© www.soinside.com 2019 - 2024. All rights reserved.