java实现有限长度的小顶堆
时间: 2023-12-10 20:03:44 浏览: 98
最大(小)堆Java实现
Java中可以通过优先队列(PriorityQueue)来实现小顶堆。默认情况下,PriorityQueue是一个小顶堆,也就是说每次取出队列中的元素都是当前队列中最小的元素。
但是,PriorityQueue的默认实现是无限长度的,如果要实现有限长度的小顶堆,需要在初始化PriorityQueue时设置其容量大小,并在插入元素时判断队列是否已满,如下所示:
```java
import java.util.PriorityQueue;
public class MinHeap {
private PriorityQueue<Integer> pq;
private int capacity;
public MinHeap(int capacity) {
this.capacity = capacity;
pq = new PriorityQueue<>(capacity);
}
public void add(int val) {
if (pq.size() < capacity) {
pq.add(val);
} else if (val < pq.peek()) {
pq.poll();
pq.add(val);
}
}
public int[] toArray() {
int[] res = new int[capacity];
int i = 0;
for (int num : pq) {
res[i++] = num;
}
return res;
}
}
```
在上面的代码中,我们将有限长度的小顶堆封装在了一个MinHeap类中,其中capacity为堆的容量大小,add方法用于往堆中添加元素,toArray方法用于将堆中的元素转换成数组输出。
在add方法中,我们首先判断堆是否已满,如果未满则直接添加元素;如果已满,则判断新添加的元素是否比堆顶元素小,如果是,则弹出堆顶元素并添加新元素。
最后,我们可以通过调用toArray方法将堆中的元素转换成数组输出。
阅读全文