java PriorityQueue(优先级队列)
2023-09-27 14:23:51 时间
先进先出描述了最典型的队列.队列规则是值在给定一组队列中的元素的情况下,确定下一个弹出队列的元素的规则,先进先出声明的是下一个元素应该是等待时间最长的元素
优先级队列声明下一个弹出的元素是最需要的元素(具有最高优先级),当在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 *///:~
相关文章
- 跟我学Java多线程——线程池与堵塞队列
- 新一代最强开源UI自动化测试神器Playwright(Java版)环境搭建
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
- Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)
- JAVA 不同类载入器命名空间的理解
- Android Binder原理(六)Java Binder的初始化
- Java优先队列(堆)理解和使用
- 服务器部署Java项目启动命令
- 都说变量有七八种,到底谁是 Java 的亲儿子
- java操作mongoDB数据库的简单实例
- Java多线程总结之线程安全队列Queue
- JAVA基本数据类型及其转换
- Java消息队列
- java基础的第二轮快速学习!day10
- 消灭Java代码的“坏味道”
- Java的泛型方法概念原则
- 【华为OD机试真题java、python、c++、JsNode】通信误码【2022 Q4 | 100分】
- java学习-消息队列rabbitmq的组成
- Java集合基础知识笔记:List集合(为什么需编写equals方法)、Map集合(equals与hashCode方法)、EnumMap好处、有顺序的TreeMap、读写配置文件Properties、Set集合(不重复的key值)与有顺序的Set、队列、优先队列、双端队列、栈、迭代器
- Java学习书籍推荐(步步为营)
- 深入Java设计模式之中介模式
- Java并发编程(十)阻塞队列
- Caused by: java.lang.ClassNotFoundException: flex.messaging.io.BeanProxy
- Java数据结构和算法day01 稀疏数组与队列
- Java开发 - 消息队列之RabbitMQ初体验
- Java使用Rabbitmq惊喜队列queue和消息内容的本地持久化核心方法。(内容存储在硬盘)
- Java 多线程(七) 线程间的通信——wait及notify方法
- java常见面试题及答案 11-20(JVM)
- Java list 获取元素
- Java 优先级队列
- Java 队列以及循环队列