Queue介绍

美人如斯!
前言
队列是一种先进先出(FIFO)的数据结构,与生活中的排队类似,即先来先被服务,这样的特点决定了其具有一定的优先级含义,可以被用于任务调度等场景。队列模型如图:
图1.队列模型
java中的Queue
1.接口类Queue
java中通过定义Queue接口类及一系列行为来描述队列。队列的操作一般包括:出队和入队,Queue接口针对这些操作定义了三种行为:
- 插入:入队,向队列插入一个元素;
- 移除:出队,从队列中移除一个元素;
- 检查:从队列中获取一个元素,但是不移除;
其中每种行为又分为两种形式:
- 快速失败(fail-fast),立即抛出异常
- 返回特定的值,根据实现的不同,返回
null或者false
Queue的UML类图如下:
图2.Queue UML图
- add(): 向队列中增加一个元素,如果队列已满,将抛出IllegalStateException异常,增加成功,返回true;
- offer(): 同add操作很类似,都是向队列中插入元素,区别在于,如果队列已满时,插入返回false;
- remove(): 获取并移除队列头部的元素,如果队列是空,将抛出NoSuchElementException异常;
- poll(): 同remove操作很类似,区别在于,如果队列是空,将返回null;
- element(): 获取但不移除队头元素,如果队列是空,将抛出NoSuchElementException异常;
- peek(): 同element操作很类似,区别在于,如果队列是空,返回null;
2.实现
Queue的实现种类繁多,不同的实现有不同的应用场景。先通过总结性的概括下其繁杂的种类,然后再分析些常见的队列。
根据以上UML图可以看出,根据不同的特点,Queue大致可以分为三种类型:
Queue的UML类图如下:
图2.Queue UML图
- Queue的直接实现
- Deque双向队列:队头和队尾均能进行入队和出队操作
- BlockingQueue阻塞队列:阻塞式队列,某些出队和入队操作会阻塞
Queue介绍的更多相关文章
- [操作系统知识储备,进程相关概念,开启进程的两种方式、 进程Queue介绍]
[操作系统知识储备,进程相关概念,开启进程的两种方式.进程Queue介绍] 操作系统知识回顾 为什么要有操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作 ...
- Python3.5 queue模块详解
queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue 在python中,多个线程之间的数据是共享的,多个线程进行数据交换 ...
- Python中Queue模块及多线程使用
Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...
- (转)Python3.5 queue模块详解
原文:https://www.cnblogs.com/CongZhang/p/5274486.html queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在py ...
- python之线程queue
线程queue介绍 Queue的种类: FIFO: Queue.Queue(maxsize=0) FIFO即First in First Out,先进先出.Queue提供了一个基本的FIFO容器,使 ...
- python中的Queue模块
queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- gevent.queue
目录 Gevent gevent基础之阻塞,非阻塞 同步,异步概念 同步异步与阻塞,非阻塞区别 Queue python内置Queue介绍 Gevent gevent基础之阻塞,非阻塞 1.geven ...
- python基础 — Queue 队列
queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换 ...
随机推荐
- linux防火墙和SELinux
1. 关闭防火墙 永久性生效 开启:chkconfig iptables on 关闭:chkconfig iptables off 即时生效 开启:service iptables start 关闭: ...
- VMWare共享文件夹使用
1. 先在windows中创建一个文件夹,使用英文名称. 2. VMWare中,菜单栏 虚拟机->设置 3. Linux中的访问目录 /mnt/hgfs/winshare winshare ...
- Flask拾遗总汇1
目录 1.flask的路由分发方式 2.请求响应相关 3.flask配置文件拾遗(config) 4.路由系统参数配置 4.1 可传入参数: 4.2 常用路由系统有以上五 5.反向生成URL: url ...
- Nginx七层负载均衡的几种调度算法
Nginx是一款轻量级的高性能web服务器,同时也是一款非常优秀的负载均衡器和反向代理服务器.由于支持强大的正则匹配规则.动静分离.URLrewrite功能及安装配置简单且对网络稳定性依赖非常小等 ...
- shell 脚本中 while 只执行一次
实例代码 while read line ; do ssh -p20002 $line -o StrictHostKeyChecking=no xxxxxxxxx done < ip.txt w ...
- 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...
- python测试开发django-72.删除表后如何重新生成表
前言 在使用ORM建表的时候,由于需要对数据库表的重新设计,需要删除原表,并通过Django的ORM功能重新同步表. 删除表之后,发现用 makemigrations 和 migrate 无法生成新的 ...
- 三块sm865组建RAID0
介绍 使用三块sm865组件raid0,cpu为6700k,主板为华硕的z170-A 这里使用的是主板自带的raid0,不是win10自带的带区卷 CrystalDiskMark AS SSD Ben ...
- 仿照addCleanup 在unittest中清理addSetupclass资源
addCleanup的用例这里不介绍了,可以看我的另一编文章: python unittest框架中addCleanup函数详解 但如果有下面这种场景,还是会遗留大批理资源 在setUpClass注入 ...
- 【Nginx】在Windows下使用Nginx解决前端跨域问题
提出问题:因为一些历史原因,后台代码不能动.请求别人的接口拿数据显示在前端,怎么办呢? 分析问题:通过ajax请求. 解决问题:因为浏览器的同源策略,所以需要解决跨域问题.(同源策略:请求的url地址 ...