Queue Implementations
Queue
实现分为通用实现和并发实现。
通用队列实现
如上一节所述,LinkedList
实现Queue
interface,为add
,poll
等提供先进先出(FIFO)队列操作。
PriorityQueue类是基于* heap *数据结构的优先级队列。此队列根据构造时指定的 Sequences 对元素进行排序,这些 Sequences 可以是元素的自然 Sequences,也可以是显式Comparator
施加的 Sequences。
队列检索操作poll
,remove
,peek
和element
-访问队列开头的元素。就指定的 Sequences 而言,“队列头”是最小的元素。如果多个元素的价值最小,那么 head 是这些元素之一;联系被任意 break。
PriorityQueue
及其迭代器实现Collection
和Iterator
interface的所有可选方法。不能保证方法iterator
中提供的迭代器以任何特定 Sequences 遍历PriorityQueue
的元素。对于有序遍历,请考虑使用Arrays.sort(pq.toArray())
。
并发队列实现
java.util.concurrent
软件包包含一组同步的Queue
interface和类。 BlockingQueue扩展了Queue
的操作,这些操作 await 检索元素时队列变为非空,并 await 存储元素时队列中的空间变为可用。该interface由以下类实现:
-
LinkedBlockingQueue —由链接的节点支持的可选有界 FIFO 阻止队列
-
ArrayBlockingQueue —由数组支持的有限 FIFO 阻塞队列
-
PriorityBlockingQueue —由堆支持的无限优先级阻塞队列
-
DelayQueue —由堆支持的基于时间的调度队列
-
SynchronousQueue —使用
BlockingQueue
interface的简单集合点机制
在 JDK 7 中,TransferQueue是专用的BlockingQueue
,其中将元素添加到队列中的代码可以选择 await(阻塞)另一个线程中的代码以检索该元素。 TransferQueue
有一个实现:
- LinkedTransferQueue —基于链接节点的无限制
TransferQueue