Java优先队列初识

来源:互联网 发布:网络群众路线问责 编辑:程序博客网 时间:2024/05/19 11:49
package aaa;import java.util.*;/* 优先队列,除了和普通数列的特点一样以外,此数列里面的每个数据都有一个优先级,每次操作包括查询,删除,插入, * 都是根据优先级进行的,说明白点就是已经排好序了呗,默认情况下是按照从小到大排序,也可以自己定义比较器来进行自定义排序 * 具体的实现原理可以参照我上节写的堆排序 * 这样就比较好玩了,再也不用用collection死死的了,至少可以换种方法,而且效率也会有所提升 * 下面是我写的一个小小的例子 * 注意:add和offer实现的效果一样,只是发生错误时处理的方式不同,前者抛出异常后者返回false * 其他的peek和element,poll和remove也是类似 * */public class Main {    static Scanner in = new Scanner(System.in);    static int n;    //自己定义比较器    static Comparator<stu> com = new Comparator<stu>() {@Overridepublic int compare(stu o1, stu o2) {return o2.score-o1.score;}};public static void main(String[] args) {PriorityQueue<stu> que = new PriorityQueue<stu>(com);n = in.nextInt();for (int i = 1; i <= n; i++) {stu s = new stu(in.nextInt(), in.next());que.offer(s);  }       for (int i = 1; i <= n; i++){       stu t = new stu();      t = que.poll();  System.out.print(t.name+" "+t.score);  System.out.println();   }       }}class stu{int score;String name;stu(){}stu(int s,String n){this.score = s;this.name = n;}}
具体实现原理参照上一篇的堆排序