队列Queue-01

举报
kwan的解忧杂货铺 发表于 2024/08/04 23:07:54 2024/08/04
【摘要】 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

image-20230723005409678

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 的实现类

image-20240804225450857

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。