首页 > 其他分享 >PriorityBlockingQueue的简单介绍

PriorityBlockingQueue的简单介绍

时间:2022-11-17 22:59:40浏览次数:34  
标签:name number 介绍 queue add User 简单 PriorityBlockingQueue

队列通常是先进先出的,而PriorityQueue是按照元素的优先级从小到大出队列的。正因为如此,
PriorityQueue中的2个元素之间需要可以比较大小,并实现Comparable接口

 

因为使用PriorityBlockingQueue中默认比较器,当数据无法比较,这是需要我们自定义比较器

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;
        }
    }

}

  

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

 

 



标签:name,number,介绍,queue,add,User,简单,PriorityBlockingQueue
From: https://www.cnblogs.com/q202105271618/p/16892443.html

相关文章

  • JS最大值、最小值、排序等的简单实现
    最大值Math.max(...arr)最小值Math.min(...arr)从小到大排序arr.sort((a,b)=>a-b)从大到小排序arr.sort((a,b)=>b-a) 最大数Infinity最小数-Infini......
  • 【C++】如果你准备学习C++,并且有C语言的基础,我希望你能简单的过一遍知识点。
    相关视频——黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili(1-83)我的小站——半生瓜のblog我知道这个视频早已经被很多人学习并且记录​笔记,......
  • Rust库学习-cipher(简单使用)
    介绍cipher是Rust的一个密码库实践Cargo.toml[dependencies]aes="0.8.2"base64="0.13.1"cipher="0.4.3"main.rsuseaes::cipher::{generic_array::Generic......
  • CF1648D 简单清楚的做法
    CF1648D简单清楚的做法我自己做这题没做出来,看网上题解都有点难看懂,自己搞一个前置知识线段树维护:对于两个序列\(a,b\),给定\(l,r\),询问:\(\max(a_i+b_j),l\lei\le......
  • C语言简单的猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>intmain(void){intnum=0;srand((unsigned)time(NULL));inti=rand();while(scanf("%d",&num)!=EO......
  • Kubernetes日志采集Sidecar模式介绍
    摘要:DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外......
  • Linux简单扩展Http服务
    一、个人用户主页1开启主页功能[root@centos~]#vim/etc/httpd/conf.d/userdir.conf1.1重启服务[root@centos~]#systemctlrestarthttpd2、创建个人用户网站的数据2.1......
  • 2022.11.17 Java 面向对象的介绍
    属性+方法=类面向过程与面向对象不可分割,面向对象是由一个个面向过程组成,就像教育部由一个个老师组成。面向对象的本质:以类的方式组织代码,以对象的形式组织(封装)数据;......
  • 红外热成像仪测温模块简要介绍说明
    (1)A型和B型的区别区别主要有以下几点视场角不同:A型为110*75°,B型为55*35°,通俗一点讲就是A型是广角,所以镜头矮一些,视野更宽,但对远处物体的捕捉能力更低,B型更......
  • Python之configparser模块的简单使用
    一、configparser安装pip3installconfigparser二、新建config.ini[ENV]env=QA1[QA1]url=https://qa1-xxx.cns_url=https://qa-s-xxx.cn[QA2]url=htt......