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区别不大,主要不同是用数组实现了一个二叉堆,实现队列按优先级从小到大出队列,队列长度不够后,自动扩容,生产者不用考虑阻塞问题

 

 



posted @   不忘初心2021  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示