Queue

来源:互联网 发布:ed2k樱井知香 喷泉 编辑:程序博客网 时间:2024/05/16 07:41

队列是元素在处理之前暂存的地方。除了基本的Collection操作,队列还有自己的插入、删除和监测操作。下面是Queue接口:

public interface Queue<E> extends Collection<E> {    E element();    boolean offer(E e);    E peek();    E poll();    E remove();}

队列的方法分成了两大类:(1). 如果操作失败,抛出异常(2).如果操作失败,要么返回空要么返回 false。下表详细描述了Queue的方法:

队列接口的结构

操作类型 抛出异常 返回特定值 插入 add(e) offer(e) 删除 remove() poll() 监测 element() peek

 

队列通常都是(但不绝对)先进先出(FIFO)的方式。 特殊的队列就是优先级队列,它的元素是根据元素的值排列的(具体的,可以参看对象排序的章节)。无论哪种排列方式, 只要调用方法remove或者poll,队列头部的元素就会被移除。在一个先进先出的队列里,所有的新元素都会被添加到队尾,其它的队列可能用不同的放置规则。每个队列的实现都必须指明排序属性。

你是可以限定一个队列容纳的元素个数的,这样的队列也叫做有边界的队列。有一些在包java.util.concurrent实现的队列是有边界, 在包java.util下的都是没有边界的。

add方法是从Collection继承来的,用来添加元素,如果添加时超过了队列的上限,会抛出IllegalStateExceptionoffer方法设计的本意是只给有边界的队列用的,和add方法不同的是, 如果添加元素失败,它会返回false而不是抛异常。

removepoll方法都是移除队列头部的元素并且将它返回, 至于到底哪一个元素被移除掉(或者到底哪一个元素现在在队列头部)和队列的排序策略有关。 只有当队列是空的时候,这两个方法的行为才不相同。在空的情况下, remove抛出NoSuchElementException异常,而poll直接返回空。

elementpeek方法返回但是并不移除队列头部的元素。那么他们之间的不同和remove poll非常相像。 当队列是空的时候, element抛出NoSuchElementException异常,而peek直接返回空。

队列的实现一般来说是不允许插入空元素的,然而LinkedList是一个例外,它后来改进并且实现了队列接口。因为历史原因(这谁都说不清了),它是允许空元素的。但是你最好别利用这一点, 因为空是pollpeek方法的特殊返回值。

原文见:
http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html

0 0