• java PriorityQueue(优先级队列)


     先进先出描述了最典型的队列.队列规则是值在给定一组队列中的元素的情况下,确定下一个弹出队列的元素的规则,先进先出声明的是下一个元素应该是等待时间最长的元素

     优先级队列声明下一个弹出的元素是最需要的元素(具有最高优先级),当在PriorityQueue调用offer()方法插入一个对象时,这个对象就会在队列中被排序,默认的排序将使用队列中的自然排序,但是可以通过提供自己的Comparator来修改这个顺序,PriorityQueue可以确保当你调用peek(),poll()和remove()方法时,获得的元素将是队列优先级最高的元素,

     在PriorityQueue队列中,重复是允许的,最小的值拥有最高的优先级(如果是String,空格也可以算作值,并且比字母的优先级高),Integer,String,Character可以与PriorityQueue一起工作,因为这些类已经内建了自然排序,如果要使用自己的类,就必须包括额外的功能以产生自然排序,或者提供自己的Comparator

    package object;
    //: holding/PriorityQueueDemo.java
    import java.util.*;
    
    public class PriorityQueueDemo {
      public static void main(String[] args) {
        PriorityQueue<Integer> priorityQueue =
          new PriorityQueue<Integer>();
        Random rand = new Random(47);
        for(int i = 0; i < 10; i++)
          priorityQueue.offer(rand.nextInt(i + 10));
        QueueDemo.printQ(priorityQueue);
    
        List<Integer> ints = Arrays.asList(25, 22, 20,
          18, 14, 9, 3, 1, 1, 2, 3, 9, 14, 18, 21, 23, 25);
        priorityQueue = new PriorityQueue<Integer>(ints);
        QueueDemo.printQ(priorityQueue);
        priorityQueue = new PriorityQueue<Integer>(
            ints.size(), Collections.reverseOrder());
        priorityQueue.addAll(ints);
        QueueDemo.printQ(priorityQueue);
    
        String fact = "EDUCATION SHOULD ESCHEW OBFUSCATION";
        List<String> strings = Arrays.asList(fact.split(""));
        PriorityQueue<String> stringPQ =
          new PriorityQueue<String>(strings);
        QueueDemo.printQ(stringPQ);
        stringPQ = new PriorityQueue<String>(
          strings.size(), Collections.reverseOrder());//Collections.reverseOrder()反序排列
        stringPQ.addAll(strings);
        QueueDemo.printQ(stringPQ);
    
        Set<Character> charSet = new HashSet<Character>();
        for(char c : fact.toCharArray())
          charSet.add(c); // Autoboxing
        PriorityQueue<Character> characterPQ =
          new PriorityQueue<Character>(charSet);
        QueueDemo.printQ(characterPQ);
      }
    } /* Output:
    0 1 1 1 1 1 3 5 8 14
    1 1 2 3 3 9 9 14 14 18 18 20 21 22 23 25 25
    25 25 23 22 21 20 18 18 14 14 9 9 3 3 2 1 1
           A A B C C C D D E E E F H H I I L N N O O O O S S S T T U U U W
    W U U U T T S S S O O O O N N L I I H H F E E E D D C C C B A A
      A B C D E F H I L N O S T U W
    *///:~
  • 相关阅读:
    卡特兰数
    割点和桥
    子序列(超级水)
    react 进行时
    又开启react之路
    关于特殊字体
    react 组件传值
    git 的安装和项目建立
    ES6 let and const
    js封装的一行半显示省略号(字数自由控制)
  • 原文地址:https://www.cnblogs.com/jiangfeilong/p/10284260.html
Copyright © 2020-2023  润新知