优先级队列(堆)

优先级队列在Java中是一种基于堆结构的数据结构,通常用于需要高效获取最小或最大元素的场景。本文介绍了如何定义和使用优先级队列,包括如何通过比较器创建最大堆。示例代码展示了如何插入元素、获取最小元素以及删除最小元素的操作。优先级队列在只进行插入和删除操作时效率较高,但在修改已有节点值时不如手动维护堆高效。
摘要由CSDN通过智能技术生成

1.什么是优先级队列

优先级队列就是用库内已有的类,这个类名字是队列,其实不是队列
是一种堆结构。它默认为最小堆,可以通过改比较器,实现最大堆。

2.什么时候用它什么时候不用它

  • 当我们只需要做取出,和放入堆的方法时可以使用它
  • 为什么我们不在其他时候用它,明明有已有的函数?
  • 因为它在其他时候无法做到和手写堆一样时间复杂度低:例如改变某一个节点的值,然后重新实现堆。我们首先可以直接从这个节点开始上下调整就行,但是系统的不能,它只能一次又一次的遍历节点,每一个节点调整

3.它的具体用法

记得import两个库:

import java.util.PriorityQueue;//引用库
import java.util.Comparator;

3.1定义

PriorityQueue<Integer> heap = new PriorityQueue<Integer>();
//这样就实现了优先级队列的定义,但是默认为最小堆
PriorityQueue<Integer> heap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
		    public int compare(Integer i1,Integer i2){
		        return i2-i1;
		    }
		});//通过调用比较器,实现最大堆

3.2输入输出

	public static void main(String[] args) {
		PriorityQueue<Integer> heap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
		    public int compare(Integer i1,Integer i2){
		        return i2-i1;
		    }
		});
	    
	    heap.add(3);//加入
	    heap.add(2);
	    heap.add(8);
	    System.out.println(heap.peek());//取顶点
	   int k= heap.poll();//取顶点加上删去顶点
	    System.out.println(heap.peek());
	    System.out.println(k);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉卧考场君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值