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