【数据结构】队列(Queue)
Queue界说
Java中的队列(Queue)是一种先辈先出(FIFO)的数据结构。队列只答应在一段举行插入数据操纵,称为入队,在另一端举行删除数据操纵,称为出队。我们可以把队列形象看作为列队。在最前面的举行出队,从末了面举行入队。
https://i-blog.csdnimg.cn/direct/26beab42e959498ca14f5938b051756f.png
队列的根本概念
FIFO原则:先辈入队列的元素将先离开队列
队头:举行删除操纵(出队)的一端
队尾:举行插入操纵(入队)的一端
语法界说
public interface Queue<E> extends Collection<E>
Java中队列的几种实现方式
Java提供了多种队列的实现,以下只是几种常见的队列实现:
1.LinkedList
·LinkedList类实现了Queue接口,因此可以用作队列
·它是一个双向链表,答应在两头举行高效的插入和删除操纵
2.ArrayDeque
·ArrayDeque是一个基于动态数组的双端队列实现
·它提供了高效的插入和删除操纵,而且没有容量限定(动态扩容)
·与LinkedList相比,ArrayDeque在大多数环境下性能更优,由于它没有链表节点的开销
3.BlockingQueue
·BlockingQueue是Java并发库中的一个队列接口(壅闭队列),提供了线程安全的操纵
·它实用于多线程环境,可以通过put()和take()方法壅闭线程,直到队列中有元素可以插入或取出
·常见的实现类有ArrayBlockingQueue、LinkedBlockingQueue等
留意:由于Queue是接口,不能直接创建实例。须要使用实在现类来创建实例。
如:Queue<Integer> queue=new ArrayDeque<>();
实在,在Java中,并不但仅只有这三种实现方式,另有优先队列等。这三种队列的实现方式后续会专门讲授。
紧张方法
入队:将元素添加到队列的末了,返回boolean值表现是否乐成入队
·boolean add(E e):但与offer方法有一点区别,在无法入队时会抛出非常
·boolean offer(E e)
出队:从队列的头部移除并返回元素
·E remove():返回移除的元素,假如队列为空则会抛出非常
·E poll():返回移除的元素,假如队列为空则返回null
查察队首元素:返回队列头部的元素但不移除它
·E element():返回队首元素,假如队列为空则会抛出非常
·E peek():返回队首元素,假如队列为空则返回null
上述便是Queue接口中的全部方法,在实在现类中另有其他方法。如:在ArrayDeque中有size()、isEmpty().....等方法
循环队列与双端队列
1.循环队列
·循环队列是一种基于数组的队列实现,通过"循环"使用数组空间来克制浪费
·它须要额外的逻辑来处理处罚队列的空和满状态,通常通过保存一个位置或使用标记来判断
2.双端队列(Deque)
·双端队列答应在两头举行插入和删除操纵,因此它比平常的队列更加机动
·Java中的Deque接口及实在现类(如ArrayDeque、LinkedList)提供了双端队列的功能
https://i-blog.csdnimg.cn/direct/27765458c7074a7c84887e6a5eabf9a1.png
循环队列和双端队列我们后续也会专门举行讲授。在本章,我们须要学习使用Queue的紧张方法
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]