队列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)