zoukankan      html  css  js  c++  java
  • PriorityQueue优先队列用法入门

    PriorityQueue是队列的一种,它叫做优先队列,该类实现了Queue接口。

    之所以叫做优先队列,是因为PriorityQueue实现了Comparator这个比较接口,也就是PriorityQueue内部具有了排序方法,在offer(插入)或poll(弹出)元素的过程中,优先队列中的数据会动态排序(而非显式的调用排序方法,可能初学者会这么认为)。

    如果不提供Comparator的话,PriorityQueue会按默认的执行,即按照自然数排列,数字最小的优先权最高,对于字符串来说,则是按照字典序。

    优先队列不同于常规的队列,对于常规队列来说,每次从队尾入队,队首出队;而对于优先权队列来说,每次出队则是优先权最高的元素。

    下面呢,让我们以一个具体案例来更深入的理解PriorityQueue的用法。

     1 public static void main(String[] args) {
     2         // TODO Auto-generated method stub
     3         Queue<Integer> queue=new PriorityQueue<Integer>(10,new Comparator<Integer>() {
     4 
     5             @Override
     6             public int compare(Integer i, Integer j) {
     7                 // TODO Auto-generated method stub
     8                 //注意理解,这里是奇数在左侧,数字大的在左侧
     9                 int result=i%2-j%2;
    10                 if(result==0)
    11                     result=i-j;
    12                 return result;
    13             }
    14         });
    15         for(int i=0;i<10;i++)
    16         {
    17             queue.offer(i);
    18         }
    19         for(int i=0;i<10;i++)
    20         {
    21             System.out.println(queue.poll());
    22         }
    23     }        

    上述代码实现了一个比较器,该比较器设置为奇数在偶数的左侧,大数在小数的左侧。故输出结果为:0 2 4 6 8 1 3 5 7 9

    如果,把比较器的参数i和j互换一下,那么,亲们,能猜测到结果吗?

    参数互换以后,奇数在偶数的右侧,大数在小数的右侧(注意,个人感觉右侧的优先权最高,即右侧即为队首,勿喷~);

    public static void main(String[] args) {
            // TODO Auto-generated method stub
            Queue<Integer> queue=new PriorityQueue<Integer>(10,new Comparator<Integer>() {
    
                @Override
                public int compare(Integer j, Integer i) {
                    // TODO Auto-generated method stub
                    int result=i%2-j%2;
                    if(result==0)
                        result=i-j;
                    return result;
                }
            });
            for(int i=0;i<10;i++)
            {
                queue.offer(i);
            }
            for(int i=0;i<10;i++)
            {
                System.out.println(queue.poll());
            }
        }

    打印结果为 9 7 5 3 1 8 6 4 2 0

  • 相关阅读:
    15--k8s之安全认证
    14--k8s之StorageClass,ConfigMap,Secret
    13--基本存储、高级存储、存储配置
    10--k8s之数据持久化
    9--k8s之Endpoints、健康服务检查、高可用
    8--k8s之service和ingress详解
    7--k8s之Pod控制器详解
    6--k8s之Pod结构、配置、生命周期、调度
    索引原理和慢查询优化
    pymysql模块及sql注入
  • 原文地址:https://www.cnblogs.com/shenshencrown/p/5397871.html
Copyright © 2011-2022 走看看