# Deque 接口

一个线性 collection,支持在两端插入和移除元素。名称 deque 是 “double ended queue(双端队列)”的缩写, 通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列, 也支持没有固定大小限制的双端队列。

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

下表总结了差异

操作类型 第一个元素(头部) 最后一个元素(尾部)
插入 addFirst(e) ,offerFirst(e) addLast(e) ,offerLast(e)
移除 removeFirst() ,pollFirst() removeLast() ,pollLast()
检查 getFirst() ,peekFirst() getLast() ,peekLast()

都有两个方法,只是前者抛出异常,后者返回特殊值

除了这些插入,删除和检查 Deque 实例的基本方法外,Deque 接口还有一些更预定义的方法。

  • removeFirstOccurrence

    从此双端队列移除第一次出现的指定元素。如果此双端队列不包含该元素,则不作更改。 更确切地讲,移除第一个满足 (o==null ? e==null : o.equals(e)) 的元素 e(如果存在这样的元素)。 如果此双端队列包含指定的元素(或者此双端队列由于调用而发生了更改),则返回 true。

  • removeLastOccurrence

    从此双端队列移除最后一次出现的指定元素。如果此双端队列不包含该元素,则不作更改。 更确切地讲,移除最后一个满足 (o==null ? e==null : o.equals(e)) 的元素 e(如果存在这样的元素)。 如果此双端队列包含指定的元素(或者此双端队列由于调用而发生了更改),则返回 true。