您现在的位置是:亿华云 > 知识
Java中Queue的3种方式实现方式
亿华云2025-10-04 03:15:02【知识】1人已围观
简介一、队列的概念Queue用于模拟队列这种数据结构,队列通常是指“先进先出”FIFO=first in first out)的容器。新元素插入offer)到队列的尾部,访问元素poll)操作会返回队列头
一、式方式队列的实现概念
Queue用于模拟队列这种数据结构,队列通常是式方式指“先进先出”(FIFO=first in first out)的容器。新元素插入(offer)到队列的实现尾部,访问元素(poll)操作会返回队列头部的式方式元素。通常,实现队列不允许随机访问队列中的式方式元素。
这种结构就相当于我们排队上车,实现先到的式方式站在前面,先上车,实现后到的式方式得等前面先上车了再上车。
排队进地铁站,实现排队打饭,式方式排队买火车票,实现排队买东西,式方式排队办理银行业务,排队…..
Queue的实现方式
二、Java中的Queue的实现有三种方式
阻塞队列
非阻塞队列
双向队列
Queue 跟 List、Set 一样,也是继承了 Collection 接口。既然生活中的“排队”都那么多,站群服务器所以Queue的使用场景也是非常多的,很典型的JDK自带的线程池中就大量使用了Queue来存储任务。
阻塞队列
阻塞队列是一个可以阻塞的先进先出集合,比如某个线程在空队列获取元素时、或者在已存满队列存储元素时,都会被阻塞。
说白了就是干等着,啥也干不了。排队上车的时候,你就只能一直站在在那里排队,你要是想去上厕所回来你的位置都不见了,还得重新排队。
BlockingQueue 接口常用的实现类如下:
ArrayBlockingQueue :基于数组的有界阻塞队列,必须指定大小。
LinkedBlockingQueue :基于单链表的无界阻塞队列,不需指定大小。
PriorityBlockingQueue :基于最小二叉堆的无界、优先级阻塞队列。云服务器提供商
DelayQueue:基于延迟、优先级、无界阻塞队列。
SynchronousQueue :基于 CAS 的阻塞队列。
常用方法:
add():新增一个元索,假如队列已满,则抛异常。
offer():新增一个元素,假如队列没满则返回 true,假如队列已满,则返回 false。
put():新增一个元素,假如队列满,则阻塞。
element():获取队列头部一个元素,假如队列为空,则抛异常。
peek():获取队列头部一个元素,假如队列为空,则返回 null。
remove():执行删除操作,返回队列头部的元素,假如队列为空,则抛异常。
poll():执行删除操作,返回队列头部的元素,假如队列为空,则返回 null。
take():执行删除操作,返回队列头部的服务器租用元素,假如队列为空,则阻塞。
非阻塞队列
非阻塞队列是使用CAS(compare and set)机制实现,类似 volatile,并发性能好。
人太多了,很多现在开始流行取号,先取个号,看着离我这号太远了,我出去溜达溜达一下再来。
常用的阻塞队列有 PriorityQueue 和 ConcurrentLinkedQueue。
PriorityQueue :基于优先级的无界优先级队列
ConcurrentLinkedDeque:基于双向链表结构的无界并发队列。
双端队列(Deque)
Deque 是一个既可以在头部操作元素,又可以为尾部操作元素,俗称为双向(双端)队列。Deque 继承自 Queue,Deque 实现类有 LinkedList、 ArrayDeque、ConcurrentLinkedDeque 等等。在将List篇的时候,里面就说LinkedList是一种双向队列,其实它也是Deque的一种实现方式。
常用双向对垒的实现类有:
LinkedList:基于单链表的无界双端队列,允许元素为 null。
ArrayDeque:基于数组的有界双端队列,不允许 null。不是线程安全的。当作为栈使用时,性能比Stack好;当作为队列使用时,性能比LinkedList好。
很赞哦!(32)
相关文章
- 并非一个好米任何人都会给你一个好的价格。那你该如何用以有的好米卖出最理想的价格呢?
- 几行 Java 代码搞定图片提取文字功能
- 面试官:如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据?
- 轮询锁使用时遇到的问题与解决方案!
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 字节一次面试,被二叉树的层序遍历捏爆了!
- Python 的协程和 goroutine 有什么区别?
- VR的这张「旧船票」,能登上「元宇宙」这艘宇宙飞船吗?
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- Docker正着手更新并扩展产品订阅机制