队列的相关知识学习

举报
多米诺的古牌 发表于 2021/08/26 23:30:59 2021/08/26
【摘要】 1.队列队列是一种常用的数据结构之一,一般遵循FIFO原则,即先进先出后进后出原则;队列Queue有三个分支,分别是双端队列Deque,阻塞队列BlockingQueue,非阻塞队列AbstractQueue;阻塞队列BlockingQueue接口中,常用的实现类有ArrayBlockingQueue、LinkedBlockingQueue、SynchronizedBlockingQueue...

1.队列

队列是一种常用的数据结构之一,一般遵循FIFO原则,即先进先出后进后出原则;

队列Queue有三个分支,分别是双端队列Deque,阻塞队列BlockingQueue,非阻塞队列AbstractQueue;

阻塞队列BlockingQueue接口中,常用的实现类有ArrayBlockingQueue、LinkedBlockingQueue、SynchronizedBlockingQueue(同步队列);

2.阻塞队列

2.1 阻塞队列中的四种API

由于有多种业务场景,和不同的业务需求,可以按照所需自由选取使用哪种API处理队列

2.1.1 会抛除异常

在添加操作和移除操作的时候,如果超出了队列长度,会抛出异常;

2.1.1.1 添加方法add()方法;

在设置好队列长度后,超出队列长度继续添加后会抛IllegalStateException:Queue full;

2.1.1.2 移除方法remove()方法;

在设置好队列长度后,在移除操作的时候,如果移除超过队列长度,会抛NoSuchElementException异常;

2.1.1.3 检索队首元素element()方法;

2.1.2 不抛异常并且有返回值

2.1.2.1 添加操作offer()方法

在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续添加,不会抛异常,会返回false,并且丢弃添加的元素;

2.1.2.2 移除操作poll()方法

在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续移除,不会抛异常,会返回null;

2.1.2.3 检索队首元素peek()方法;

2.1.3 阻塞队列并且一直等待

2.1.3.1 添加操作put()方法;

在设置好队列长度后,如果未超过队列长度,因为没有返回值,会什么都不返回;如果超过队列长度,会阻塞队列,一直等待有空闲位置;

2.1.3.2 移除操作take();

在设置好队列长度后,如果未超过队列长度,因为没有返回值,会什么都不返回;如果超过队列长度,会阻塞队列,一直等待有空闲位置;

2.1.4 不抛出异常并且有返回值,在操作失败后进行超时等待

2.1.4.1 添加操作offer(需要添加的元素,超时时间,超时时间的单位)方法;

在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续添加,不会抛异常,会返回false,并且丢弃添加的元素,并且在所设置的超时时间后自动结束操作;

2.1.4.2 移除操作poll(超时时间,超时时间的单位)方法;

在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续移除,不会抛异常,会返回false,并且丢弃添加的元素,并且在所设置的超时时间后自动结束操作;

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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