java集合系列09 Queue

来源:互联网 发布:cab软件下载 编辑:程序博客网 时间:2024/06/11 12:33

前言

是几篇博客我们一步步分析Collection AbstractCollection List AbstractList..等最后分析了我们最常用的ArrayList类。
以后的几篇文章可能要着重介绍LinkedList了
我们先来看一看UML图
uml
可以看到好多接口和抽象类我们已经介绍过了
新面孔也可能是Queue Deque AbstractSequentialList

Queue

文档介绍

保存元素用来优先处理的集合,除了基本的集合操作,队列提供额外的插入,提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,依赖于具体的操作)。插入操作的后一种形式是用于专门为有容量限制的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实现通常不允许插入null元素,尽管某些实现(如LinkedList)并不禁止插入null。即使在允许null的实现中,也不应该将null插入到Queue中,因为null也用作poll方法的一个特殊返回值,表明队列不包含元素。

Queue 实现通常未定义 equals 和 hashCode 方法的基于元素的版本,而是从 Object 类继承了基于身份的版本,因为对于具有相同元素但有不同排序属性的队列而言,基于元素的相等性并非总是定义良好的。

有人觉得看这么冗长的文档很头痛,但我还是提倡大家看文档,这样才能理解接口设计的思想,最优的用法

源码:

public interface Queue<E> extends Collection<E>{    boolean add(E e);    boolean offer(E e);    E remove();    E poll();    E element();    E peek();
0 0
原创粉丝点击