欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java的优先队列PriorityQueue

程序员文章站 2022-06-25 18:47:42
...

一、概念
优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序,可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类。对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排列。但对于自己定义的类来说,需要自己定义比较器。
二、常用基本方法

peek()//返回队首元素
poll()//队首元素出队并返回队首元素
add()//添加元素
size()//返回队列元素个数
isEmpty()//判断队列是否为空,空返回true,非空返回false;

三、优先队列的使用
1、不使用比较器,默认升序排列

Queue<Integer> q=new PriorityQueue<>();
q.add(1);
q.add(3);
q.add(2);
while(q.isEmpty()){
 System.out.print(q.poll()+" ");
}
//输出结果为
//1 2 3

2、使用比较器

Queue<Integer> p=new PriorityQueue<>((e1,e2)->e2-e1);
q.add(2);
q.add(1);
q.add(3);
while(q.isEmpty()){
 System.out.print(q.poll()+" ");
}
//输出结果为
//3 2 1
Queue<Integer> p=new PriorityQueue<>((e1,e2)->e2-e1);
//可以写为
Queue<Integer> p=new PriorityQueue<>(cmp);
static Comparator<Integer> cmp = new Comparator<Integer>() {
      public int compare(Integer e1, Integer e2) {
        return e2 - e1;//为降低//e1-e2为升序
      }
    };

3、实现其它功能比较

private int sum(arr){
 return arr[0]+arr[1];
}
public static void main(String[] args){
 Queue<int[]> p=new PriorityQueue<>((e1,e2)->sum(e2)-sum(e1));
 int[] a1={1,2};
 int[] a2={3,5};
 p.add(a1);
 p.add(a2);
 int[] b=p.poll();
 System.out.print(b[0]+" ");
 System.out.print(b[1]);
}
//输出结果为
//3 5