- 类型参数:
E- 此双端队列中包含的元素类型
- 所有父级接口:
Collection<E>,Iterable<E>,Queue<E>
- 所有已知的子接口:
BlockingDeque<E>
- 所有已知的实现类:
ArrayDeque,ConcurrentLinkedDeque,LinkedBlockingDeque,LinkedList
Deque 实现对它们可能包含的元素数量没有固定限制,但此接口支持容量受限的双端队列以及没有固定大小限制的双端队列。
该接口定义了访问双端队列两端元素的方法。提供了插入、删除和检查元素的方法。这些方法中的每一个都以两种形式存在:一种在操作失败时抛出异常,另一种返回一个特殊值( null 或 false ,具体取决于操作)。插入操作的后一种形式专门设计用于容量受限的Deque实现;在大多数实现中,插入操作不会失败。
上述十二种方法总结如下表:
| 第一元素(头) | 最后一个元素(尾巴) | |||
|---|---|---|---|---|
| 抛出异常 | 特殊值 | 抛出异常 | 特殊值 | |
| 插入 | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
| 消除 | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
| 检查 | getFirst() |
peekFirst() |
getLast() |
peekLast() |
该接口扩展了 Queue 接口。当双端队列用作队列时,会产生 FIFO(先进先出)行为。元素在双端队列的末尾添加,并从开头移除。从 Queue 接口继承的方法恰好等同于 Deque 方法,如下表所示:
Queue方法 |
等价于Deque方法 |
|---|---|
add(e) |
addLast(e) |
offer(e) |
offerLast(e) |
remove() |
removeFirst() |
poll() |
pollFirst() |
element() |
getFirst() |
peek() |
peekFirst() |
双端队列也可以用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留的 Stack 类。当双端队列用作堆栈时,元素从双端队列的开头被压入和弹出。堆栈方法等同于 Deque 方法,如下表所示:
| 栈方法 | 等价于Deque方法 |
|---|---|
push(e) |
addFirst(e) |
pop() |
removeFirst() |
peek() |
getFirst() |
请注意,当双端队列用作队列或堆栈时,peek 方法同样有效;在任何一种情况下,元素都是从双端队列的开头提取的。
该接口提供了两种移除内部元素的方法,removeFirstOccurrence 和 removeLastOccurrence 。
与List 接口不同,此接口不支持对元素进行索引访问。
虽然没有严格要求 Deque 实现禁止插入空元素,但强烈建议它们这样做。强烈鼓励任何允许空元素的 Deque 实现的用户not利用插入空值的能力。之所以如此,是因为 null 被各种方法用作特殊的返回值,以指示双端队列为空。
Deque 实现通常不定义 equals 和 hashCode 方法的基于元素的版本,而是从类 Object 继承基于身份的版本。
此接口是 Java 集合框架 的成员。
- 自从:
- 1.6
-
方法总结
修饰符和类型方法描述boolean如果可以在不违反容量限制的情况下立即将指定元素插入此双端队列表示的队列(换句话说,在此双端队列的尾部),成功时返回true,如果当前没有可用空间则抛出IllegalStateException.booleanaddAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此双端队列的末尾,就像对每个元素调用addLast(E)一样,按照集合的迭代器返回它们的顺序。void如果可以在不违反容量限制的情况下立即插入指定元素,则将指定元素插入此双端队列的前面,如果当前没有可用空间,则抛出IllegalStateException。void如果可以在不违反容量限制的情况下立即插入指定元素,则在此双端队列的末尾插入指定元素,如果当前没有可用空间,则抛出IllegalStateException。boolean如果此双端队列包含指定元素,则返回true。以相反的顺序返回此双端队列中元素的迭代器。element()检索但不删除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素)。getFirst()检索但不删除此双端队列的第一个元素。getLast()检索但不删除此双端队列的最后一个元素。iterator()以正确的顺序返回此双端队列中元素的迭代器。boolean如果可以在不违反容量限制的情况下立即将指定元素插入此双端队列表示的队列(换句话说,在此双端队列的尾部),成功时返回true,如果当前没有可用空间则返回false。booleanofferFirst(E e) 将指定的元素插入此双端队列的前面,除非它违反容量限制。boolean除非违反容量限制,否则在此双端队列的末尾插入指定的元素。peek()检索但不删除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),或者如果此双端队列为空则返回null。检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回null。peekLast()检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。poll()检索并删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回null。检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回null。pollLast()检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。pop()从此双端队列表示的堆栈中弹出一个元素。void如果可以在不违反容量限制的情况下立即将元素推入此双端队列表示的堆栈(换句话说,在此双端队列的头部),如果当前没有可用空间,则抛出IllegalStateException。remove()检索并删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。boolean从此双端队列中移除第一次出现的指定元素。检索并删除此双端队列的第一个元素。boolean从此双端队列中移除第一次出现的指定元素。检索并删除此双端队列的最后一个元素。boolean从此双端队列中移除指定元素的最后一次出现。intsize()返回此双端队列中的元素数。在接口 java.util.Collection 中声明的方法
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
-
方法详情
-
addFirst
如果可以在不违反容量限制的情况下立即插入指定元素,则将指定元素插入此双端队列的前面,如果当前没有可用空间,则抛出IllegalStateException。使用容量受限的双端队列时,通常最好使用方法offerFirst(E)。- 参数:
e- 要添加的元素- 抛出:
IllegalStateException- 如果由于容量限制此时无法添加元素ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
addLast
如果可以在不违反容量限制的情况下立即插入指定元素,则在此双端队列的末尾插入指定元素,如果当前没有可用空间,则抛出IllegalStateException。使用容量受限的双端队列时,通常最好使用方法offerLast(E)。此方法等效于
add(E)。- 参数:
e- 要添加的元素- 抛出:
IllegalStateException- 如果由于容量限制此时无法添加元素ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
offerFirst
将指定的元素插入此双端队列的前面,除非它违反容量限制。当使用容量受限的双端队列时,此方法通常优于addFirst(E)方法,后者可能仅通过抛出异常来插入元素失败。- 参数:
e- 要添加的元素- 返回:
true如果元素被添加到这个双端队列,否则false- 抛出:
ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
offerLast
除非违反容量限制,否则在此双端队列的末尾插入指定的元素。当使用容量受限的双端队列时,此方法通常优于addLast(E)方法,后者可能仅通过抛出异常来插入元素失败。- 参数:
e- 要添加的元素- 返回:
true如果元素被添加到这个双端队列,否则false- 抛出:
ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
removeFirst
E removeFirst()检索并删除此双端队列的第一个元素。此方法与pollFirst的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 返回:
- 这个双端队列的头
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
removeLast
E removeLast()检索并删除此双端队列的最后一个元素。此方法与pollLast的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 返回:
- 这个双端队列的尾巴
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
pollFirst
E pollFirst()检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回null。- 返回:
-
这个双端队列的头部,或者
null如果这个双端队列是空的
-
pollLast
E pollLast()检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。- 返回:
-
这个双端队列的尾部,或者
null如果这个双端队列是空的
-
getFirst
E getFirst()检索但不删除此双端队列的第一个元素。此方法与peekFirst的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 返回:
- 这个双端队列的头
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
getLast
E getLast()检索但不删除此双端队列的最后一个元素。此方法与peekLast的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 返回:
- 这个双端队列的尾巴
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
peekFirst
E peekFirst()检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回null。- 返回:
-
这个双端队列的头部,或者
null如果这个双端队列是空的
-
peekLast
E peekLast()检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。- 返回:
-
这个双端队列的尾部,或者
null如果这个双端队列是空的
-
removeFirstOccurrence
从此双端队列中移除第一次出现的指定元素。如果双端队列不包含该元素,则它不变。更正式地说,删除第一个元素e这样Objects.equals(o, e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列因调用而更改)。- 参数:
o- 要从此双端队列中删除的元素(如果存在)- 返回:
true如果一个元素作为这个调用的结果被移除- 抛出:
ClassCastException- 如果指定元素的类与此双端队列不兼容 (optional)NullPointerException- 如果指定元素为 null 并且此双端队列不允许 null 元素 (optional)
-
removeLastOccurrence
从此双端队列中移除指定元素的最后一次出现。如果双端队列不包含该元素,则它不变。更正式地说,删除最后一个元素e这样Objects.equals(o, e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列因调用而更改)。- 参数:
o- 要从此双端队列中删除的元素(如果存在)- 返回:
true如果一个元素作为这个调用的结果被移除- 抛出:
ClassCastException- 如果指定元素的类与此双端队列不兼容 (optional)NullPointerException- 如果指定元素为 null 并且此双端队列不允许 null 元素 (optional)
-
add
如果可以在不违反容量限制的情况下立即将指定元素插入此双端队列表示的队列(换句话说,在此双端队列的尾部),成功时返回true,如果当前没有可用空间则抛出IllegalStateException.使用容量受限的双端队列时,通常最好使用offer。此方法等效于
addLast(E)。- 指定者:
add在接口Collection<E>中- 指定者:
add在接口Queue<E>中- 参数:
e- 要添加的元素- 返回:
true(由Collection.add(E)指定)- 抛出:
IllegalStateException- 如果由于容量限制此时无法添加元素ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
offer
如果可以在不违反容量限制的情况下立即将指定元素插入此双端队列表示的队列(换句话说,在此双端队列的尾部),成功时返回true,如果当前没有可用空间则返回false。当使用容量受限的双端队列时,此方法通常优于add(E)方法,后者可能仅通过抛出异常来插入元素失败。此方法等效于
offerLast(E)。- 指定者:
offer在接口Queue<E>中- 参数:
e- 要添加的元素- 返回:
true如果元素被添加到这个双端队列,否则false- 抛出:
ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
remove
E remove()检索并删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。此方法与poll()的不同之处仅在于,如果此双端队列为空,它会抛出异常。此方法等效于
removeFirst()。- 指定者:
remove在接口Queue<E>中- 返回:
- 此双端队列所代表的队列的头部
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
poll
E poll()检索并删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回null。此方法等效于
pollFirst()。 -
element
E element()检索但不删除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素)。此方法与peek的不同之处仅在于,如果此双端队列为空,它会抛出异常。此方法等效于
getFirst()。- 指定者:
element在接口Queue<E>中- 返回:
- 此双端队列所代表的队列的头部
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
peek
E peek()检索但不删除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),或者如果此双端队列为空则返回null。此方法等效于
peekFirst()。 -
addAll
将指定集合中的所有元素添加到此双端队列的末尾,就像对每个元素调用addLast(E)一样,按照集合的迭代器返回它们的顺序。使用容量受限的双端队列时,通常最好在每个元素上分别调用
offer。尝试添加元素时遇到的异常可能会导致在抛出相关异常时仅成功添加了部分元素。
- 指定者:
addAll在接口Collection<E>中- 参数:
c- 要插入到此双端队列中的元素- 返回:
true如果此双端队列因调用而改变- 抛出:
IllegalStateException- 如果由于插入限制此时不能添加所有元素ClassCastException- 如果指定集合的元素的类阻止将其添加到此双端队列NullPointerException- 如果指定的集合包含空元素并且此双端队列不允许空元素,或者如果指定的集合为空IllegalArgumentException- 如果指定集合的元素的某些属性阻止将其添加到此双端队列- 参见:
-
push
如果可以在不违反容量限制的情况下立即将元素推入此双端队列表示的堆栈(换句话说,在此双端队列的头部),如果当前没有可用空间,则抛出IllegalStateException。此方法等效于
addFirst(E)。- 参数:
e- 要推送的元素- 抛出:
IllegalStateException- 如果由于容量限制此时无法添加元素ClassCastException- 如果指定元素的类阻止将其添加到此双端队列NullPointerException- 如果指定元素为空且此双端队列不允许空元素IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此双端队列
-
pop
E pop()从此双端队列表示的堆栈中弹出一个元素。换句话说,删除并返回此双端队列的第一个元素。此方法等效于
removeFirst()。- 返回:
- 此双端队列前面的元素(这是此双端队列表示的堆栈的顶部)
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
remove
从此双端队列中移除第一次出现的指定元素。如果双端队列不包含该元素,则它不变。更正式地说,删除第一个元素e这样Objects.equals(o, e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列因调用而更改)。此方法等效于
removeFirstOccurrence(Object)。- 指定者:
remove在接口Collection<E>中- 参数:
o- 要从此双端队列中删除的元素(如果存在)- 返回:
true如果一个元素作为这个调用的结果被移除- 抛出:
ClassCastException- 如果指定元素的类与此双端队列不兼容 (optional)NullPointerException- 如果指定元素为 null 并且此双端队列不允许 null 元素 (optional)
-
contains
如果此双端队列包含指定元素,则返回true。更正式地说,返回true当且仅当此双端队列包含至少一个元素e使得Objects.equals(o, e)。- 指定者:
contains在接口Collection<E>中- 参数:
o- 要测试其在此双端队列中是否存在的元素- 返回:
true如果这个双端队列包含指定的元素- 抛出:
ClassCastException- 如果指定元素的类与此双端队列不兼容 (optional)NullPointerException- 如果指定元素为 null 并且此双端队列不允许 null 元素 (optional)
-
size
int size()返回此双端队列中的元素数。- 指定者:
size在接口Collection<E>中- 返回:
- 此双端队列中的元素数
-
iterator
以正确的顺序返回此双端队列中元素的迭代器。元素将按从第一个(头)到最后一个(尾)的顺序返回。 -
descendingIterator
以相反的顺序返回此双端队列中元素的迭代器。元素将按从最后(尾)到第一个(头)的顺序返回。- 返回:
- 以相反顺序遍历此双端队列中元素的迭代器
-