队列也是一种特殊的线性表,它只允许在两端进行操作,插入或者取出,不允许操作中间的数据。比如只允许在对头出队,队尾入队。这样就具有先进先出的特性(first in first out-FIFO)。就像排队买东西一样,不允许插队,先排先买。
队列分为单向队列(有序队列),就是上面所说的排队模型,先进先出的操作,只允许一边进,另一边出,比如Java中的Queue。另外一种就是双端队列,两端都可以进行进出操作。比如java中的Deque。
既然队列也是线性表的一种,那么实现队列,就可以用数组或者链表来实现。
如果再细分一点的话,可以看着这俩接口的实现,简单列举几个:
PriorityQueue:数组实现的有序队列,可以传入一个比较器Comparator,实现队列中元素的顺序。。
ArrayDeque:数组实现的双端队列
LinkedList:用链表实现的双端队列
Juc并发包下面:
ArrayBlockingQueue:数组实现的阻塞队列
PriorityBlockingQueue:带优先级的阻塞队列
LinkedBlockingQueue:链表实现的阻塞队列
可以看出大佬们的命名是很规范的,从类名直接可以看出来这队列的特性以及用什么数据结构实现的。
简单用数组实现一个有界队列
1.初始化一个数组,这个是头尾都是指向的0