队列是一种先进先出的数据结构,在实际开发过程中使用也较为广泛。JRE给我们提供两种类型的队列以供使用。一种是常规队列Queue;另一种是双端队列Deque,即对列头和对列尾都可以操作的特殊队列。如下图
相较于Queue而言,Deque提供了更加宽泛的规则,因此实现逻辑也相较复杂。此外,对Deque做特殊限制,也可作为先进后出的堆栈使用。
常规的Queue
要满足队列先进先出的特性,Queue就必须暴露队尾增加元素对头获取元素的方法。JRE中每个方法都存在两种形式:一种操作失败时抛出异常;另一种返回一个特殊值(null或false,具体取决于操作)。JRE给我们提供了如下的队列继承关系图
如上图所示,JRE中提供了阻塞队列和线程安全的队列。阻塞队列又分为基于数组实现的有界队列ArrayBlockingQueue,基于链表实现的可指定长度队列LinkedBlockingQueue,具有优先级的队列PriorityBlockingQueue,无界延迟队列DelayQueue和无缓冲队列SynchronousQueue。
双端队列Deque
Deque是doubleendedqueue的缩写,双端队列Deque是对Queue的一种扩展。它支持队列两端插入和删除元素。Deque支持有容量的双端队列,也支持没有固定大小的双端队列。JRE中Deque的类集成图如下
如图中所示,Deque提供了基于链表实现的双端队列LinkedList,基于数组实现的双端队列ArrayDeque和基于链表实现的阻塞双端队列LinkedBlockingDeque。
队列是非常有用的数据结构。现在,你知道JRE给我们提供的队列了吗?