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

 

 



posted @ 2022-11-17 22:40  不忘初心2021  阅读(36)  评论(0编辑  收藏  举报