queue(queued是什么意思)

什么是队列?队列是一种特殊的线性表,它遵循先进先出和后进后出的基本原则。一般来说,它只允许在表的前端删除,而在表的后端插入。但是java中的一些队列运行到任何地

什么是队列?

队列是一种特殊的线性表,它遵循先进先出和后进后出的基本原则。一般来说,它只允许在表的前端删除,而在表的后端插入。但是java中的一些队列运行到任何地方都可以插入和删除;比如我们常用的LinkedList集合实现了Queue接口,所以可以理解为LinkedList是一个队列;

queue(queued是什么意思)插图

Java队列特性

队列主要分为阻塞和非阻塞、有界和无界、单向链表和双向链表。

阻塞和非阻塞。

阻塞队列

进入队列(删除元素)时,如果元素数量超过队列总数,则等待(阻塞)。队列中的元素出队后,当元素个数不超过队列总数时,解除阻塞状态,然后继续排队。

出列(添加元素)时,如果队列是空,也会等待(阻塞)。当队列中有值时,阻塞状态将被释放,然后继续出队。

阻塞队列的好处是可以防止队列容器溢出;只要满了,就堵,就等;没有溢出;

只要它阻塞队列,它就是线程安全的;

非阻塞队列

无论它是出列还是入队,都不会被阻塞,

在进入列时,如果元素的数量超过了队列的总数,就会抛出异常。

出列时,如果队列为空,则取出空值;

一般情况下,很少使用非阻塞队列,常用阻塞对象较多;阻塞队列和非阻塞队列的最大区别在于阻塞队列提供以下两种方法:

队列阻塞方法:take()

队列阻塞方法:put()

有界和无界

有界的:有界的,尺寸和长度有限的。

无界:无限大小,实际上是无限大小,实际上是有界的,但是当它超出边界的时候,就会被扩展,就像ArrayList一样,在内部动态扩展。

单向链表和双向链表

单向链表:除了元素本身,每个元素都存储一个指针,指针指向下一个元素;

queue(queued是什么意思)插图(1)

双向链表:除了元素本身,还有两个指针,一个指向上一个元素的地址,另一个指向下一个元素的地址;

queue(queued是什么意思)插图(2)

java 队列接口继承图

queue(queued是什么意思)插图(3)

常见队列方法

添加一个元行。如果队列已满,抛出IIIegaISlabEepeplian异常。

移除并返回队列头部的元素。如果队列是空,抛出NoSuchElementException异常。

返回队列头部的元素。如果队列是空,将抛出NoSuchElementException异常。

Offer添加一个元素,如果队列已满,则返回true或false。

Poll移除并收回队列头部的元素。如果队列是空,则返回null。

Peek返回队列头部的元素。如果队列是空,则返回null。

Put添加一个元素。如果队列已满,它将阻塞。

Take移除并返回队列头部的元素。如果队列是空,就会阻塞。

DrainTo(list)一次获取队列中的所有元素。

知识点:remove、element、offer、poll、peek其实都属于队列接口。

非阻塞队列

1、并发链接队列

单向链表结构的无界并发队列,非阻塞队列,CAS实现的线程安全,内部基于节点的实现。

2、并发链接请求

双向链表结构的无界并发队列,非阻塞队列,CAS实现的线程安全。

3、优先级队列

基于内部数组实现,线程不安全队列

阻塞队列

1、延迟队列

支持元素延迟获取的无界阻塞队列

2、链接传输队列

一种由链表结构组成的无界阻塞队列。

3、数组阻塞队列

有界队列,阻塞型,队列大小必须在初始化时指定,不能更改;,底层用数组实现;

4、同步队列

最多只能存储一个元素,每个put操作必须等待一个take操作,否则无法继续添加元素。

5、优先级阻塞队列

有优先级的队列,而不是先入先出队列。元素按优先级顺序删除,并且是无界的,即没有容量上限。尽管该队列在逻辑上是无限的,但尝试执行添加操作可能会导致OutOfMemoryError,因为资源已经耗尽。

私信666接收信息

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/142871.html

发表回复

登录后才能评论