优先级队列(堆)

优先级队列

  • 1.什么是优先级队列
  • 2.什么时候用它什么时候不用它
  • 3.它的具体用法
    • 记得import两个库:
    • 3.1定义
    • 3.2输入输出

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);
	}

你可能感兴趣的:(学习记录,算法,学习算法课程,leetcode,算法,职场和发展)