• 理解数据结构Priority Queue


    们知道Queue是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在Queue中基于优先级处理对象。举个例子,比方说我们有一个每日交易时段生成股票报告的应用程序,需要处理大量数据并且花费很多处理时间。客户向这个应用程序发送请求时,实际上就进入了队列。我们需要首先处理优先客户再处理普通用户。在这种情况下,Java的PriorityQueue会很有帮助。

    PriorityQueue能高效地插入元素,高效地删除最小元素。

    删除是基于默认的自然顺序排列(也就是数字小的在队列头)或者按Comparator规定的顺序排列。

     

    比如说,Sue有一些轻微的小伤口最先来到了医院的急诊室

     

     

    虽然Sue是先来的,但是,Joe被蛇咬伤更加需要先治疗,于是Joe被排在了Sue的前面

     

    这时候Queue就基于优先级处理对象了,即PriorityQueue。

     1   public static void main(String[] args) {
     2 
     3         PriorityQueue<String> pQueue = new PriorityQueue<>();
     4 
     5         pQueue.add("B");
     6 
     7         pQueue.offer("C");
     8 
     9         pQueue.add("F");
    10 
    11         pQueue.offer("A");
    12 
    13         pQueue.add("L");
    14 
    15         pQueue.add("D");
    16 
    17         pQueue.add("E");
    18 
    19         pQueue.add("J");
    20 
    21         System.out.println("Head:" + pQueue.peek());
    22 
    23         while (!pQueue.isEmpty()) {
    24 
    25             System.out.print(pQueue.poll() + " ");
    26 
    27         }
    28 
    29     }

    出:

    Head: A

    A B C D E F J L

    以上代码可以看出,即使add到PriorityQueue的顺序是乱序,但PriorityQueue会以默认的从小到大顺序被poll()出来

     

     

     

     

     

  • 相关阅读:
    华为2019软件题
    图像的存储格式转化(python实现)
    windows+两个ubuntu系统的引导启动问题
    《视觉SLAM十四讲》课后习题—ch6
    视觉SLAM十四讲课后习题—ch8
    LINQ根据时间排序问题(OrderBy、OrderByDescending)
    Element的扩展
    CSharp
    jQuery函数使用记录
    日记越累
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9086175.html
Copyright © 2020-2023  润新知