Java集合框架 05.Queue接口、Deque接口

Queue接口

  Queue —— 队列,是一种具有FIFO(先进先出)特性的线性表,非常常用。Java实现中,Queue接口继承自Collection接口,并提供了基础能力的抽象。

package java.util;

public interface Queue<E> extends Collection<E>

boolean add(E e)
  将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。

  add函数在Collection接口就已经申明了。在Queue中,add函数的语义得到了进一步的明确。

boolean offer(E e)
  将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。

E remove()
  获取并移除此队列的头。此方法与 poll 唯一的不同在于:此队列为空时将抛出一个异常。

E poll()
  获取并移除此队列的头,如果此队列为空,则返回 null。

E element()
  获取,但是不移除此队列的头。此方法与 peek 唯一的不同在于:此队列为空时将抛出一个异常。

E peek()
  获取但不移除此队列的头;如果此队列为空,则返回 null。

队列方法总结
-抛出异常返回特殊值
插入add()offer()
移除remove()poll()
检查element()peek()
是否允许null元素

  Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。

Deque接口

  Deque —— 双端队列、double ended queue,是一种具有FIFO(先进先出)和LIFO(后进先出)性质的数据结构。在Java实现中,Deque接口继承自Queue接口,并提供了进一步的抽象。

package java.util;

public interface Deque<E> extends Queue<E>  

  Deque接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。

第一个元素(头部)最后一个元素(尾部)
抛出异常特殊值抛出异常特殊值
插入addFirst(e)offerFirst(e)addLast(e)offerLast(e)
移除removeFirst()pollFirst()removeLast()pollLast()
检查getFirst()peekFirst()getLast()peekLast()

  除了上述十二个新增的函数,Deque接口中还定义了2个堆栈函数和2个删除函数,堆栈函数在随后的章节中会具体介绍。

  Queue接口中的remove(Object o)方法是从此双端队列中移除第一次出现的指定元素,等效于removeFirstOccurrence(Object o)。

void push(E e);

E pop();

// 从此双端队列移除第一次出现的指定元素。
boolean removeFirstOccurrence(Object o);  

// 从此双端队列移除最后一次出现的指定元素。
boolean removeLastOccurrence(Object o);  
用作队列结构

  在将双端队列用作队列时,将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于Deque接口种的新方法。

Queue 方法等效 Deque 方法
add(e)addLast(e)
offer(e)offerLast(e)
remove()removeFirst()
poll()pollFirst()
element()getFirst()
peek()peekFirst()
用作堆栈结构

  当要使用Stack这一数据结构时,应优先使用此接口的实现,而不是使用java.util.Stack类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法。

堆栈方法等效 Deque 方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()
是否允许null元素

  虽然 Deque 实现没有严格要求禁止插入 null 元素,但建议最好这样做。建议任何事实上允许 null 元素的 Deque 实现用户最好不 要利用插入 null 的功能。这是因为各种方法会将 null 用作特殊的返回值来指示双端队列为空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值