PriorityBlockingQueue的简单介绍
队列通常是先进先出的,而PriorityQueue是按照元素的优先级从小到大出队列的。正因为如此,
PriorityQueue中的2个元素之间需要可以比较大小,并实现Comparable接口
因为使用PriorityBlockingQueue中默认比较器,当数据无法比较,这是需要我们自定义比较器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package com.java.test.prioritys.blockings.queues; import lombok.Builder; import lombok.Data; /** * @author yourheart * @Description * @create 2022-11-16 23:24 */ @Data @Builder public class User implements Comparable<User> { private String number; private String name; @Override public int compareTo(User o) { if ( this .number.charAt( 0 ) == o.getNumber().charAt( 0 )) { return this .number.compareTo(o.getNumber()); } if ( this .number.charAt( 0 ) == 'V' ) { return - 1 ; } else { return 1 ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void userTest(){ PriorityBlockingQueue<User> queue = new PriorityBlockingQueue<>(); queue.add(User.builder().number( "A13" ).name( "小白" ).build()); queue.add(User.builder().number( "V13" ).name( "小红" ).build()); queue.add(User.builder().number( "A23" ).name( "小绿" ).build()); queue.add(User.builder().number( "V33" ).name( "小红" ).build()); for ( int i= 0 ;i< 4 ;i++){ User poll = queue.poll(); log.info( "poll:{}" ,poll); } } |
put中使用的是offer方法
和ArrayBlockingQueu区别不大,主要不同是用数组实现了一个二叉堆,实现队列按优先级从小到大出队列,队列长度不够后,自动扩容,生产者不用考虑阻塞问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异