这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践未利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参见Java语言变化。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参见JDK发行说明。
Queue
实现分为通用和并发两种实现。
如前一节所述,LinkedList
实现了Queue
接口,提供了先进先出(FIFO)队列操作,如add
、poll
等。
PriorityQueue
类是基于堆数据结构的优先级队列。该队列根据构造时指定的顺序对元素进行排序,可以是元素的自然顺序或显式Comparator
指定的顺序。
队列的检索操作——poll
、remove
、peek
和element
——访问队列头部的元素。队列的头部是根据指定的顺序最小的元素。如果多个元素的值最小相等,则头部是这些元素之一;如果存在多个最小值相等的元素,则随机选择一个。
PriorityQueue
及其迭代器实现了Collection
和Iterator
接口的所有可选方法。在方法iterator
中提供的迭代器不能保证以任何特定顺序遍历PriorityQueue
的元素。要进行有序遍历,考虑使用Arrays.sort(pq.toArray())
。
java.util.concurrent
包含一组同步的Queue
接口和类。BlockingQueue
通过在检索元素时等待队列变为非空以及在存储元素时等待队列中有可用空间来扩展Queue
。此接口由以下类实现:
LinkedBlockingQueue
— 一个可选有界FIFO阻塞队列,由链表节点支持ArrayBlockingQueue
— 一个有界FIFO阻塞队列,由数组支持PriorityBlockingQueue
— 一个无界阻塞优先级队列,由堆支持DelayQueue
— 一个基于时间的调度队列,由堆支持SynchronousQueue
— 使用BlockingQueue
接口的简单会合机制在JDK 7中,TransferQueue
是一种特殊的BlockingQueue
,它允许将元素添加到队列中的代码有选择地等待(阻塞),直到另一个线程中的代码取出元素为止。 TransferQueue
只有一个实现:
LinkedTransferQueue
— 基于链式节点的无界TransferQueue