Java 中队列的使用

刚才看见群里的一个朋友在问队列的使用,确实在现实的写代码中非常少使用队列的,反正我是从来没使用过。仅仅是学数据结构的时候学过。

以下是我写的一个小样例,希望有不足之处请提出改正。O(∩_∩)O~

看代码:

 

以下是API中对队列的说明:

 

public interface Queue<E>
extends Collection<E>

在处理元素前用于保存元素的 collection。除了主要的 Collection 操作外,队列还提供其它的插入、提取和检查操作。每一个方法都存在两种形式:一种抛出异常(操作失败时),还有一种返回一个特殊值(nullfalse,详细取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

  抛出异常 返回特殊值
插入 add(e) offer(e)
移除 remove() poll()
检查 element() peek()

队列通常(但并不是一定)以 FIFO(先进先出)的方式排序各个元素。只是优先级队列和 LIFO 队列(或堆栈)例外,前者依据提供的比較器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。不管使用哪种排序方式,队列的 都是调用 remove()poll() 所移除的元素。在 FIFO 队列中,全部的新元素都插入队列的末尾。其它种类的队列可能使用不同的元素放置规则。每一个 Queue 实现必须指定其顺序属性。

假设可能,offer 方法可插入一个元素,否则返回 false。这与 Collection.add 方法不同,该方法仅仅能通过抛出未经检查的异常使加入元素失败。offer 方法设计用于正常的失败情况,而不是出现异常的情况,比如在容量固定(有界)的队列中。

remove()poll() 方法可移除和返回队列的头。究竟从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove()poll() 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null

element()peek() 返回,但不移除,队列的头。

Queue 接口并没有定义堵塞队列的方法,而这在并发编程中是非经常见的。BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。

Queue 实现通常不同意插入 null 元素,虽然某些实现(如 LinkedList)并不禁止插入 null。即使在同意 null 的实现中,也不应该将 null 插入到 Queue 中,由于 null 也用作 poll 方法的一个特殊返回值,表明队列不包括元素。

Queue 实现通常没有定义 equalshashCode 方法的基于元素的版本号,而是从 Object 类继承了基于身份的版本号,由于对于具有同样元素但有不同排序属性的队列而言,基于元素的相等性并不是总是定义良好的。

 

Java 中队列的使用,布布扣,bubuko.com

Java 中队列的使用

上一篇:C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector


下一篇:JavaScript与Java那些事