zoukankan      html  css  js  c++  java
  • PriorityQueue(优先队列)

    PriorityQueue

    翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆顶为最小值。

    PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。
    PriorityQueue 队列的头指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。
    PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添加元素,其容量会自动扩容,无需指定容量增加策略的细节。

    初始化

    PriorityQueue()//使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。

    PriorityQueue<Integer> Q = new PriorityQueue<>(); // 初始化
    

    常用函数

    add(E e)//将指定的元素插入此优先级队列。
    clear()//清空
    contains(Object o) // 如果包含指定元素返回true
    iterator()//返回在此队列中的元素上进行迭代的迭代器。
    offer(E e) // 将指定元素插入此优先队列
    peek() // 获取第一个元素,及最小或最大元素
    poll() // 获取并移除第一个
    remove(Object o) // 移除指定元素
    size() // 返回元素个数

    基本使用

    public class Main {
        public static void main(String[] args) {
            PriorityQueue<String> q = new PriorityQueue<>();
            //入列
            q.offer("1");
            q.offer("2");
            q.offer("5");
            q.offer("3");
            q.offer("4");
    
            //出列
            System.out.println(q.poll());  //1
            System.out.println(q.poll());  //2
            System.out.println(q.poll());  //3
            System.out.println(q.poll());  //4
            System.out.println(q.poll());  //5
        }
    }
    

    PriorityQueue使用跟普通队列一样,唯一区别是PriorityQueue会根据排序规则决定谁在队头,谁在队尾。

    实现大根堆的两种方式

    1. 使用自定义比较器Comparator
    2. 将所有数据变为之前自身的负数之后在插入, 因为添加个负号就相当于是逆序了嘛。1 < 2 < 3 取负之后变为 -1 > - 2 > - 3

    实例

    public static void main(String[] args){
    		Scanner in = new Scanner(new InputStreamReader(System.in));
    		PriorityQueue<Integer> Q = new PriorityQueue<>();
    		int a;
    		for(int i = 0; i < 10; i++){
    			a = in.nextInt();
    			Q.add(a);
    			System.out.print(Q.peek()+" ");// 输出当前队列的最小元素
    		}
    	}
    
    输入: 1 -1 -2 -3 10 -4 -5 -6 -7 -8
    输出: 1 -1 -2 -3 -3 -4 -5 -6 -7 -8
    

    有兴趣深入了解一下:https://www.cnblogs.com/CherishFX/p/4643940.html

  • 相关阅读:
    CentOS7下搭建zabbix监控(五)——Web端配置自动发现并注册
    CentOS7下搭建zabbix监控(四)——Zabbix报警设置
    CentOS7下搭建zabbix监控(三)——Zabbix监控服务配置
    CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置
    CentOS7下搭建zabbix监控(一)——Zabbix监控端配置
    CentOS7下配置Tomcat以APR模式+Tomcat Native运行
    Webbrowser控件判断网页加载完毕的简单方法 (转)
    反射的奥妙 (转)
    .net 浏览器请求过程(图)
    .net反射详解(转)
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/12340701.html
Copyright © 2011-2022 走看看