摘要:知识点总结容器知识点总结容器接口与是在同一级别,都是继承了接口。另一种队列则是双端队列,支持在头尾两端插入和移除元素,主要包括。一个由链表结构组成的无界阻塞队列。是一个阻塞的线程安全的队列,底层实现也是使用链式结构。
Java知识点总结(Java容器-Queue)
@(Java知识点总结)[Java, Java容器]
QueueQueue接口与List、Set是在同一级别,都是继承了Collection接口。LinkedList接口实现了Queue接口。Queue接口收缩了对LinkedList的方法访问权限(也就是方法参数如果是Queue,那就只能方法Queue接口定义的方法),让方法能够正确的使用。
队列队列是一种数据结构,它有两个基本操作:在队列尾部添加一个元素,和在队列头部移除一个元素。也就是说,队列以一种先进先出(FIFO)的方式操作数据。
队列,它主要分为两大类,一类是阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。另一种队列则是双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。
方法 | 功能 | 异常处理 |
---|---|---|
add | 增加一个元索 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
remove | 移除并返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null |
peek | 返回队列头部的元素 | 如果队列为空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
take | 移除并返回队列头部的元素 | 如果队列为空,则阻塞 |
抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Queue full”)异常。当队列为空时,从队列里获取元素时会抛出NoSuchElementException异常 。
返回特殊值:插入方法会返回是否成功,成功则返回true。移除方法,则是从队列里拿出一个元素,如果没有则返回null
一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应* 中断退出。当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。
超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。
阻塞队列ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
ConcurrentLinkedQueue :基于链接节点的无界线程安全队列
Queue的使用/** * 队列测试:实现类使用LinkedList * * Queue也有很多其他的实现类,比如java.util.concurrent.LinkedBlockingQueue。 * LinkedBlockingQueue是一个阻塞的线程安全的队列,底层实现也是使用链式结构。 */ public class TestQuene { // 定义一个队列 Queuequeue; @Before public void before() { // 实例化队列变量 queue = new LinkedList (); // add方法向队列中添加元素,返回布尔值,add方法添加失败时会抛异常,不推荐使用 // queue.add("1"); // queue.add("2"); // queue.add("3"); // queue.add("4"); // queue.add("5"); // offer方法向队列中添加元素,返回布尔值 queue.offer("a"); queue.offer("b"); queue.offer("c"); queue.offer("d"); queue.offer("e"); } // poll方法移除队列首个元素并返回,若队列为空,返回null @Test public void test1() { // 弹出元素 String pollEle = queue.poll(); // 先进先出,弹出了a System.out.println(pollEle); // a System.out.println(queue); // [b, c, d, e] } // remove方法移除首个元素并返回,若队列为空,会抛出异常:NoSuchElementException,不推荐使用 @Test public void test2() { // 弹出元素 String remove = queue.remove(); // 先进先出,弹出了a System.out.println(remove); // a System.out.println(queue); // [b, c, d, e] } // peek方法返回队列首个元素,但不移除,若队列为空,返回null @Test public void test3() { // 查看首个元素 String peek = queue.peek(); // 首个元素是a,最先加入 System.out.println(peek); // a System.out.println(queue); // [a, b, c, d, e] } // element方法返回队列的头元素,但不移除,若队列为空,会抛出异常:NoSuchElementException,不推荐使用 @Test public void test4() { // 查看首个元素 String element = queue.element(); System.out.println(element); // a System.out.println(queue); // [a, b, c, d, e] } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71420.html
摘要:底层使用的是双向链表数据结构之前为循环链表,取消了循环。快速随机访问就是通过元素的序号快速获取元素对象对应于方法。而接口就是用来标识该类支持快速随机访问。仅仅是起标识作用。,中文名为双端队列。不同的是,是线程安全的,内部使用了进行同步。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的需要重点记录的知识点。...
摘要:线程安全的线程安全的,在读多写少的场合性能非常好,远远好于高效的并发队列,使用链表实现。这样带来的好处是在高并发的情况下,你会需要一个全局锁来保证整个平衡树的线程安全。 该文已加入开源项目:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目,Star 数接近 14 k)。地址:https://github.com/Snailclimb... 一 JDK ...
摘要:说到复盘基础,并不是所有的都会复盘,没那个时间更没那个必要。比如,一些基础的语法以及条件语句,极度简单。思前想后,我觉得整个计划应该从集合开始,而复盘的方式就是读源码。通常,队列不允许随机访问队列中的元素。 showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老读者都知道,我是自学转行...
摘要:同步容器及其注意事项中的容器主要可以分为四个大类,分别是和,但并不是所有的容器都是线程安全的。并发容器及其注意事项在版本之前所谓的线程安全的容器,主要指的就是同步容器,当然因为所有方法都用来保证互斥,串行度太高了,性能太差了。 Java 并发包有很大一部分内容都是关于并发容器的,因此学习和搞懂这部分的内容很有必要。 Java 1.5 之前提供的同步容器虽然也能保证线程安全,但是性能很差...
摘要:本文主要讲述消息服务在中的使用。所以需要一个监听容器工厂的概念,即接口,它会引用上面创建好的与的连接工厂,由它来负责接收消息以及将消息分发给指定的监听器。为了消费消息,订阅者必须保持运行的状态。 JMS 在 SpringBoot 中的使用 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog> 本文所有服务均采用doc...
阅读 3013·2021-11-16 11:42
阅读 3650·2021-09-08 09:36
阅读 949·2019-08-30 12:52
阅读 2481·2019-08-29 14:12
阅读 769·2019-08-29 13:53
阅读 3583·2019-08-29 12:16
阅读 643·2019-08-29 12:12
阅读 2468·2019-08-29 11:16