当前位置: 代码迷 >> 综合 >> Java实现小根堆和大根堆(PriorityQueue)
  详细解决方案

Java实现小根堆和大根堆(PriorityQueue)

热度:50   发布时间:2023-12-14 14:54:34.0

Java里面的PriorityQueue底层默认使用的堆,所以我们使用PriorityQueue就能实现堆的功能。

1、小根堆实现

package test;import java.util.Comparator;
import java.util.PriorityQueue;/*add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常offer 添加一个元素并返回true 如果队列已满,则返回falsepoll 移除并返问队列头部的元素 如果队列为空,则返回nullpeek 返回队列头部的元素 如果队列为空,则返回null*/
public class Test {public static void main(String[] args) {PriorityQueue<Integer>priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}});for(int i = 10; i >= 0; i--){if(priorityQueue.size() < 5){priorityQueue.add(i);}else {priorityQueue.remove();priorityQueue.add(i);}}while (!priorityQueue.isEmpty()) {System.out.println(priorityQueue.remove());}}
}

2、大根堆

package test;import java.util.Comparator;
import java.util.PriorityQueue;/*add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常offer 添加一个元素并返回true 如果队列已满,则返回falsepoll 移除并返问队列头部的元素 如果队列为空,则返回nullpeek 返回队列头部的元素 如果队列为空,则返回null*/
public class Test {public static void main(String[] args) {PriorityQueue<Integer>priorityQueue = new PriorityQueue<>();for(int i = 0; i < 10; i++){if(priorityQueue.size() < 5){priorityQueue.add(i);}else {priorityQueue.remove();priorityQueue.add(i);}}while (!priorityQueue.isEmpty()) {System.out.println(priorityQueue.remove());}}
}

 

  相关解决方案