Queue

队列是元素在处理之前暂存的地方。除了基本的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值