介绍:

Java中的PriorityBlockingQueue实现了BlockingQueue接口并支持PriorityQueue的功能。 那么,什么是BlockingQueue?

以下适用于BlockingQueue的任何实现:

  • 尝试检索元素时,如果队列为空,线程将等待
  • 在有限制的BlockingQueue实现的情况下,线程将等待直到它有空间插入新元素

PriorityBlockingQueuejava.util.concurrent包中存在的无限制并发阻塞队列它不允许值。

PriorityBlockingQueue中的元素根据其优先进行轮询。 默认情况下,对象的自然顺序被视为其优先级。 我们可以通过实现Comparable接口或提供Comparator来覆盖默认优先级。

假设我们有一个PriorityBlockingQueue,其中有两个或更多具有最高优先级的元素。 在这种情况下,轮询将随机返回其中之一。

创建

我们可以使用以下构造函数之一来实例化PriorityBlockingQueue

//creates an empty PriorityBlockingQueue with capacity of 11
PriorityBlockingQueue()//creates a PriorityBlockingQueue containing elements of c
PriorityBlockingQueue(Collection c)//uses given initialCapacity to instantiate a PriorityBlockingQueue
PriorityBlockingQueue(int initialCapacity)/*creates an empty PriorityBlockingQueue with given initialCapacity
* which orders its elements using given comparator
*/
PriorityBlockingQueue(int initialCapacity, Comparator comparator)

常用方法:

让我们快速看一下在使用PriorityBlockingQueue时可以使用的方法:

1.插入:

要将元素插入PriorityBlockingQueue ,我们可以使用以下任何一种方法:

  • 布尔值add(E e)
  • 布尔报价(E e)
  • 无效推(E e)
PriorityBlockingQueue<Integer> pbq = new PriorityBlockingQueue<>();pbq.add(4);    //Or
pbq.offer(1);  //Or
pbq.put(8);

由于PriorityBlockingQueue是不受限制的,因此它们的行为均相同。 换句话说, offer(e)绝不会返回falseput(e)绝不会阻止该操作。

2.删除:

我们可以通过以下方式之一删除PriorityBlockingQueue中的元素:

  • boolean remove(Object obj):此方法删除对象obj(如果存在)并返回true 。 如果不存在这样的元素,则返回false

    //Assuming pbq has [1, 4, 8] as its elements boolean result = pbq.remove(4); //true   System.out.println(pbq); [1, 8]
  • E poll(): poll()方法同时检索和删除队列的head元素。 如果队列为空,则返回null
    //Assuming pbq has [1, 4, 8] as its elements int polledItem = pbq.poll(); //1   System.out.println(pbq); [4, 8]
  • E take()抛出InterruptedException:poll()一样 ,它检索并删除给定队列开头的元素。 但是, 它将进行阻塞调用,即,如有必要,它将等待直到元素可用

3.其他方法:

其他常用的方法包括:

  • e peek():检索而不是从队列中删除元素

    //Assuming pbq has [1, 4, 8] as its elements
    int item = pbq.peek(); //1System.out.println(pbq); [1, 4, 8]
  • boolean contains(Object obj):检查给定的ob j是否存在于队列中
  • int size():返回队列的大小
  • void clear():删除队列中的所有元素
  • Object [] toArray():返回一个数组,该数组包含上下文中队列的所有元素
  • 比较器比较器():返回比较器用于排序队列中的元素
  • intrainToTo(Collection c):删除队列中所有可用的元素,并将它们添加到给定的Collection中 。 它还返回传输的元素数
  • intrainTo(Collection c,int maxElements):从队列中移除最多maxElements个元素,并将其添加到给定的Collection c中

结论:

在本快速教程中,我们探讨了PriorityBlockingQueue是什么以及如何使用它。 它是线程安全的实现,并阻止轮询,直到某个元素可用为止。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/05/priorityblockingqueue-java.html

Java中的PriorityBlockingQueue相关推荐

  1. Java中的5大队列,你知道几个?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 通过前面文章的学习<一文详解「队列」,手撸队列的3种方法!>我们知道了队列(Queue)是先进先出(FIFO)的,并 ...

  2. java add offer_图解Java中的5大队列!(干货收藏)

    Java 中的队列有很多,例如:ArrayBlockingQueue.LinkedBlockingQueue.PriorityQueue.DelayQueue.SynchronousQueue等,那它 ...

  3. 一篇图看清Java中的各种Queue

    说到数据结构,我们大概可以列出这么几个:数组,链表,栈,队列,集合,哈希表. 其中 队列 作为一个常用的数据结构,在Java中也有各种形式的实现. 顶级接口为java.util.queue. java ...

  4. java中的数据结构总结

    Java的类库实在是很多,以至于很多人都不太了解,结果总是自己造轮子. 下面汇总了Java中的一些数据结构,加上一些实现的分析,同时备忘. 至于时间复杂度,个人觉得写出来的用处不大.如果明白它是怎么实 ...

  5. 万字长文深入理解java中的集合-附PDF下载

    文章目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fai ...

  6. java中的数组、队列、堆栈

    声明一个数组 Java代码 String[] aArray = new String[5]; String[] bArray = {"a","b"," ...

  7. java中四种线程池的区别

    本文按: 一. 线程池的使用 二. 几种线程池的区别 三. 如何合理配置线程池 一.线程池的使用 在Java中,通常使用Executors 获取线程池.常用的线程池有以下几种: (1)CachedTh ...

  8. Java中的ThreadPoolExecutor类

    转载自  Java中的ThreadPoolExecutor类 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执 ...

  9. java如何实例化集合_如何在java中实例化一个Queue对象?

    Queue是一个接口,这意味着你不能直接构造一个Queue . 最好的select是构造一个已经实现Queue接口的类,如下所示: AbstractQueue , ArrayBlockingQueue ...

最新文章

  1. 如何处理跨平台的自适应三
  2. 剑指offer有python版吗_剑指Offer算法类题目[Python版]
  3. face alignment by 3000 fps系列学习总结(三)
  4. c语言十六进制字符串转整数,C语言-提取字符串中的十六进制数字并转换为一个十进制整数输出...
  5. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响
  6. LightOJ 1366 - Pair of Touching Circles (在矩形中只需要两个圆相外切,有多少种) 半径圆心均为整数)...
  7. 洛谷 P1168 中位数(优先队列)
  8. 兄弟j220怎么清零_兄弟Brother全系列打印机清零大全
  9. java 租房系统源码,JAVA房屋出租管理系统
  10. 告别晦涩难懂的物理,《张朝阳的物理课》了解一下
  11. 怎样搭建serveru ftp个人服务器
  12. 企业纯内网二进制完美部署Docker(20.10.7版本)
  13. 【转载】手机快充的核心模块:ChargePump
  14. 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店
  15. GUI设计和UI设计有什么区别?
  16. 科学计算法(e/E表示规则)
  17. 沁路墨彦文集:《闭关与梦的思索》
  18. 爱因斯坦在20世纪初出的谜语
  19. Jim在2022的8760小时
  20. VQA-CP v2数据集和VQA v2数据集

热门文章

  1. 平衡树 - FHQ 学习笔记
  2. codeforces1552 D. Array Differentiation(思维+暴力)
  3. Dubbo(一)之简介
  4. JavaFX官方教程(十)之转换类型和示例
  5. 阿里巴巴对Java编程【常量定义】的规约
  6. 《下辈子还教书》经典语录(1)
  7. Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
  8. java面向对象高级分层实例_实体类
  9. 二叉排序树的删除+图解
  10. CV中多的空格导致报错