队列Queue-01
【摘要】 1.基本介绍在 Java 中,Queue是一个接口,它属于java.util包。Queue接口表示一个队列,它是一个遵循先进先出(FIFO)原则的集合。队列不允许随机访问,只能通过队列的头部或尾部进行元素的添加和移除。 2.Queue 的介绍Queue,中文名叫队列,无论现实生活中还是计算机的世界中,都是一个很重要的角色哦~Queue 是一种数据结构,大家可以把我想象成一个数组,元素从我的...
1.基本介绍
在 Java 中,Queue是一个接口,它属于java.util包。Queue接口表示一个队列,它是一个遵循先进先出(FIFO)原则的集合。队列不允许随机访问,只能通过队列的头部或尾部进行元素的添加和移除。
2.Queue 的介绍
Queue,中文名叫队列,无论现实生活中还是计算机的世界中,都是一个很重要的角色哦~
Queue 是一种数据结构,大家可以把我想象成一个数组,元素从我的一头进入、从另外一头出去,称为 FIFO 原则(先进先出原则)。
Queue 有两个亲兄弟:List(列表)、Set(集),他们都是Collection的儿子,Queue 还有一个远房亲戚:Map(映射)。他们都是java.util包这个大家庭的成员哦~
3.队列类图
18 个 Queue 的继承实现关系图
Queue接口继承Collection接口,Collection接口继承Iterable接口BlockingQueue接口、Deque接口 继承Queue接口AbstractQueue抽象类实现Queue接口BlockingDeque接口、TransferQueue接口继承BlockingQueue接口BlockingDeque接口继承Deque接口LinkedBlockingDeque类实现BlockingDeque接口LinkedTransferQueue类接口实现TransferQueue接口LinkedList类、ArrayDeque类、ConcurrentLinkedDeque类实现 了Deque接口ArrayBlockingQueue类、LinkendBlockingQueue类、LinkedBlockingDeque类、LinkedTransferQueue类、SynchronousQueue类、PriorityBlockQueue类、DelayQueue类继承 了AbstractQueue抽象类和实现了 BlockingQueue 接口PriorityQueue类和ConcurrentLinkedQueue类继承 了AbstractQueue抽象类
注意:
- Deque:全称 Double-Ended queue,表示双端队列。
- 类实现接口,用 implements
- 接口继承接口,用 extends
- 类继承类,用 extends

4.Queue 的核心方法
- add
- element
- offer
- peek
- poll
- remove
Queue的核心方法:
| 动作 | 抛异常 | 返回特殊值 |
|---|---|---|
| Insert | add(e) | offer(e) |
| Remove | remove() | poll |
| Examine | element() | peek() |
- 比如
添加(Insert)元素的动作,会有两种方式:add(e)和offer(e)。如果调用 add(e)方法时,添加失败,则会抛异常,而如果调用的是 offer(e)方法失败时,则会返回false。offer 方法用于异常是正常的情况下使用,比如在有界队列中,优先使用 offer 方法。假如队列满了,不能添加元素,offer 方法返回 false,这样我们就知道是队列满了,而不是去 handle 运行时抛出的异常。 - 同理,移除(Remove)元素的动作,队列为空时,remove 方法抛异常,而 poll 返回 null。如果移除头部的元素成功,则返回移除的元素。
- 同理,检测(Examine)元素的动作,返回头部元素(最开始加入的元素),但不删除元素, 如果队列为空,则 element()方法抛异常,而 peek()返回 false。
- Queue 接口没有定义阻塞队列的方法,这些方法在 BlockQueue 接口中定义了。
- Queue 实现类通常不允许插入 null 元素,尽管一些实现类比如 LinkedList 不禁止插入 null,但是还是不建议插入 null,因为 null 也被用在 poll 方法的特殊返回值,以说明队列不包含元素。
5.Queue 的实现类

6.常见 Queue 说明
根据您提供的信息,我们可以创建一个表格来概述 Java 中不同的队列类型及其特性。以下是表格的格式:
| 序号 | 名称 | 类型 | 有界 | 线程安全 | 说明 |
|---|---|---|---|---|---|
| 1 | Queue<E> | 接口 | / | / | 最上层队列接口 |
| 2 | BlockingQueue<E> | 接口 | / | / | 阻塞队列接口 |
| 3 | BlockingDeque<E> | 接口 | / | / | 双向阻塞队列接口 |
| 4 | Deque<E> | 接口 | / | / | 双向队列接口 |
| 5 | TransferQueue<E> | 接口 | / | / | 传输队列接口 |
| 6 | AbstractQueue | 抽象类 | / | / | 队列抽象类 |
| 7 | PriorityQueue | 普通类 | N | N | 优先级队列类 |
| 8 | ArrayDeque | 普通类 | N | N | 数组双向队列类 |
| 9 | LinkedList | 普通类 | N | N | 链表对象类 |
| 10 | ConcurrentLinkedQueue | 普通类 | N | Y | 链表结构的线程安全的队列类 |
| 11 | ConcurrentLinkedDeque | 普通类 | N | Y | 链表结构的线程安全的双向队列类 |
| 12 | ArrayBlockingQueue | 普通类 | Y | Y | 数组结构的有界阻塞队列 |
| 13 | LinkedBlockingQueue | 普通类 | Y | Y | 链表结构的有界阻塞队列 |
| 14 | LinkedBlockingDeque | 普通类 | Y | Y | 链表结构的双向有界阻塞队列 |
| 15 | LinkedTransferQueue | 普通类 | N | Y | 链表组成的无界阻塞传输队列 |
| 16 | SynchronousQueue | 普通类 | Y | Y | 不存储元素的阻塞队列 |
| 17 | PriorityBlockingQueue | 普通类 | N | Y | 支持优先级排序的无界阻塞队列 |
| 18 | DelayQueue | 普通类 | N | Y | 支持优先级排序,延时队列,无界阻塞队列 |
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)