- 类型参数:
-
E- 此双端队列中保存的元素类型
- 所有实现的接口:
-
Serializable,Cloneable,Iterable<E>,Collection<E>,Deque<E>,Queue<E>,SequencedCollection<E>
Deque 接口的可调整大小数组实现。数组双端队列没有容量限制;它们会根据需要增长以支持使用。它们不是线程安全的;在没有外部同步的情况下,它们不支持多个线程的并发访问。禁止使用空元素。当作为堆栈使用时,此类可能比 Stack 更快,当作为队列使用时,可能比 LinkedList 更快。
大多数 ArrayDeque 操作的平摊时间为常数。异常包括 remove、removeFirstOccurrence、removeLastOccurrence、contains、iterator.remove() 和批量操作,这些操作都需要线性时间。
此类的 iterator 方法返回的迭代器是 快速失败 的:如果在创建迭代器后的任何时间修改了双端队列,除了通过迭代器自己的 remove 方法之外的任何方式,迭代器通常会抛出 ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速且干净地失败,而不是在未来的某个不确定时间冒险进行任意的、非确定性的行为。
请注意,迭代器的快速失败行为无法保证,因为一般来说,在存在未同步的并发修改的情况下,不可能做出任何硬性保证。快速失败迭代器尽力抛出 ConcurrentModificationException。因此,编写依赖此异常正确性的程序是错误的:迭代器的快速失败行为应仅用于检测错误。
此类及其迭代器实现了 Collection、SequencedCollection 和 Iterator 接口的所有 可选 方法。
此类是 Java 集合框架 的成员。
- 自 JDK 版本:
- 1.6
- 参见:
-
Constructor Summary
ConstructorsConstructorDescription构造一个初始容量足以容纳 16 个元素的空数组双端队列。ArrayDeque(int numElements) 构造一个初始容量足以容纳指定数量元素的空数组双端队列。ArrayDeque(Collection<? extends E> c) 构造一个包含指定集合元素的双端队列,元素顺序与集合迭代器返回的顺序相同。 -
Method Summary
Modifier and TypeMethodDescriptionboolean在此双端队列的末尾插入指定元素。booleanaddAll(Collection<? extends E> c) 将指定集合中的所有元素按照集合迭代器返回的顺序依次添加到此双端队列的末尾,就好像对每个元素调用addLast(E)一样。void在此双端队列的前面插入指定元素。void在此双端队列的末尾插入指定元素。voidclear()从此双端队列中移除所有元素。clone()返回此双端队列的副本。boolean如果此双端队列包含指定元素,则返回true。返回此双端队列中元素的逆序顺序的迭代器。element()检索但不移除由此双端队列表示的队列的头部。void对Iterable的每个元素执行给定操作,直到所有元素都已处理或操作引发异常。getFirst()检索但不移除此双端队列的第一个元素。getLast()检索但不移除此双端队列的最后一个元素。booleanisEmpty()如果此双端队列不包含任何元素,则返回true。iterator()返回此双端队列中元素的迭代器。boolean在此双端队列的末尾插入指定元素。booleanofferFirst(E e) 在此双端队列的前面插入指定元素。boolean在此双端队列的末尾插入指定元素。peek()检索但不移除由此双端队列表示的队列的头部,如果此双端队列为空,则返回null。检索但不移除此双端队列的第一个元素,如果此双端队列为空,则返回null。peekLast()检索但不移除此双端队列的最后一个元素,如果此双端队列为空,则返回null。poll()检索并移除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回null。检索并移除此双端队列的第一个元素,如果此双端队列为空,则返回null。pollLast()检索并移除此双端队列的最后一个元素,如果此双端队列为空,则返回null。pop()从由此双端队列表示的堆栈中弹出一个元素。void将一个元素推入由此双端队列表示的堆栈。remove()检索并移除由此双端队列表示的队列的头部。boolean从此双端队列中移除指定元素的单个实例。booleanremoveAll(Collection<?> c) 移除此集合中包含在指定集合中的所有元素(可选操作)。检索并移除此双端队列的第一个元素。boolean移除此双端队列中指定元素的第一个出现(从头到尾遍历双端队列时)。boolean移除满足给定谓词的此集合的所有元素。检索并移除此双端队列的最后一个元素。boolean移除此双端队列中指定元素的最后一个出现(从头到尾遍历双端队列时)。booleanretainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。intsize()返回此双端队列中的元素数量。在此双端队列中的元素上创建一个 延迟绑定 和 快速失败 的Spliterator。Object[]toArray()返回一个数组,其中包含此双端队列中所有元素的正确顺序(从第一个到最后一个元素)。<T> T[]toArray(T[] a) 返回一个数组,其中包含此双端队列中所有元素的正确顺序(从第一个到最后一个元素);返回的数组的运行时类型与指定数组的类型相同。Methods declared in class java.util.AbstractCollection
containsAll, toStringMethods declared in class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods declared in interface java.util.Collection
containsAll, equals, hashCode, parallelStream, stream, toArray
-
Constructor Details
-
ArrayDeque
public ArrayDeque()构造一个初始容量足以容纳 16 个元素的空数组双端队列。 -
ArrayDeque
public ArrayDeque(int numElements) 构造一个初始容量足以容纳指定数量元素的空数组双端队列。- 参数:
-
numElements- 双端队列的初始容量下限
-
ArrayDeque
构造一个包含指定集合元素的双端队列,元素顺序与集合迭代器返回的顺序相同(集合迭代器返回的第一个元素成为双端队列的第一个元素,或 前端)。- 参数:
-
c- 要放入双端队列中的元素的集合 - 抛出:
-
NullPointerException- 如果指定的集合为 null
-
-
Method Details
-
addFirst
在此双端队列的前面插入指定元素。- 指定者:
-
addFirst在接口Deque<E>中指定 - 指定者:
-
addFirst在接口SequencedCollection<E>中指定 - 参数:
-
e- 要添加的元素 - 抛出:
-
NullPointerException- 如果指定的元素为 null
-
addLast
在此双端队列的末尾插入指定元素。此方法等效于
add(E)。- 指定由:
-
addLast在接口Deque<E>中 - 指定由:
-
addLast在接口SequencedCollection<E>中 - 参数:
-
e- 要添加的元素 - 抛出:
-
NullPointerException- 如果指定的元素为null
-
addAll
将指定集合中的所有元素添加到此双端队列的末尾,就好像在集合的迭代器返回它们的顺序中调用addLast(E)一样。- 指定由:
-
addAll在接口Collection<E>中 - 指定由:
-
addAll在接口Deque<E>中 - 覆盖:
-
addAll在类AbstractCollection<E>中 - 参数:
-
c- 要插入到此双端队列中的元素 - 返回:
-
true如果调用导致此双端队列发生更改 - 抛出:
-
NullPointerException- 如果指定的集合或其任何元素为null - 参见:
-
offerFirst
将指定元素插入到此双端队列的前面。- 指定由:
-
offerFirst在接口Deque<E>中 - 参数:
-
e- 要添加的元素 - 返回:
-
true(如Deque.offerFirst(E)指定的那样) - 抛出:
-
NullPointerException- 如果指定的元素为null
-
offerLast
将指定元素插入到此双端队列的末尾。- 指定由:
-
offerLast在接口Deque<E>中 - 参数:
-
e- 要添加的元素 - 返回:
-
true(如Deque.offerLast(E)指定的那样) - 抛出:
-
NullPointerException- 如果指定的元素为null
-
removeFirst
从接口复制的描述:Deque检索并删除此双端队列的第一个元素。此方法与pollFirst的不同之处仅在于,如果此双端队列为空,则会抛出异常。- 指定由:
-
removeFirst在接口Deque<E>中 - 指定由:
-
removeFirst在接口SequencedCollection<E>中 - 返回:
- 此双端队列的头部
- 抛出:
-
NoSuchElementException- 如果此双端队列为空
-
removeLast
从接口复制的描述:Deque检索并删除此双端队列的最后一个元素。此方法与pollLast的不同之处仅在于,如果此双端队列为空,则会抛出异常。- 指定由:
-
removeLast在接口Deque<E>中 - 指定由:
-
removeLast在接口SequencedCollection<E>中 - 返回:
- 此双端队列的尾部
- 抛出:
-
NoSuchElementException- 如果此双端队列为空
-
pollFirst
从接口复制的描述:Deque检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回null。 -
pollLast
从接口复制的描述:Deque检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。 -
getFirst
从接口复制的描述:Deque检索但不删除此双端队列的第一个元素。此方法与peekFirst的不同之处仅在于,如果此双端队列为空,则会抛出异常。- 指定由:
-
getFirst在接口Deque<E>中 - 指定由:
-
getFirst在接口SequencedCollection<E>中 - 返回:
- 此双端队列的头部
- 抛出:
-
NoSuchElementException- 如果此双端队列为空
-
getLast
从接口复制的描述:Deque检索但不删除此双端队列的最后一个元素。此方法与peekLast的不同之处仅在于,如果此双端队列为空,则会抛出异常。- 指定由:
-
getLast在接口Deque<E>中 - 指定由:
-
getLast在接口SequencedCollection<E>中 - 返回:
- 此双端队列的尾部
- 抛出:
-
NoSuchElementException- 如果此双端队列为空
-
peekFirst
从接口复制的描述:Deque检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回null。 -
peekLast
从接口复制的描述:Deque检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。 -
removeFirstOccurrence
从此双端队列中删除指定元素的第一个出现(从头到尾遍历双端队列)。如果双端队列不包含该元素,则保持不变。更正式地说,删除第一个使得o.equals(e)的元素e(如果存在这样的元素)。如果此双端队列包含指定的元素,则返回true(或者等效地,如果此双端队列由于调用而更改,则返回true)。- 指定由:
-
removeFirstOccurrence在接口Deque<E> - 参数:
-
o- 如果存在,则从此双端队列中删除的元素 - 返回:
-
如果双端队列包含指定的元素,则返回
true
-
removeLastOccurrence
从此双端队列中删除指定元素的最后一个出现(从头到尾遍历双端队列)。如果双端队列不包含该元素,则保持不变。更正式地说,删除最后一个使得o.equals(e)的元素e(如果存在这样的元素)。如果此双端队列包含指定的元素,则返回true(或者等效地,如果此双端队列由于调用而更改,则返回true)。- 指定由:
-
removeLastOccurrence在接口Deque<E> - 参数:
-
o- 如果存在,则从此双端队列中删除的元素 - 返回:
-
如果双端队列包含指定的元素,则返回
true
-
add
将指定的元素插入到此双端队列的末尾。此方法等效于
addLast(E)。- 指定由:
-
add在接口Collection<E> - 指定由:
-
add在接口Deque<E> - 指定由:
-
add在接口Queue<E> - 覆盖:
-
add在类AbstractCollection<E> - 参数:
-
e- 要添加的元素 - 返回:
-
true(如Collection.add(E)指定的) - 抛出:
-
NullPointerException- 如果指定的元素为null
-
offer
将指定的元素插入到此双端队列的末尾。此方法等效于
offerLast(E)。- 指定由:
-
offer在接口Deque<E> - 指定由:
-
offer在接口Queue<E> - 参数:
-
e- 要添加的元素 - 返回:
-
true(如Queue.offer(E)指定的) - 抛出:
-
NullPointerException- 如果指定的元素为null
-
remove
检索并删除由此双端队列表示的队列的头部。此方法与poll()的区别仅在于,如果此双端队列为空,则会抛出异常。此方法等效于
removeFirst()。 -
poll
检索并删除由此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空则返回null。此方法等效于
pollFirst()。 -
element
检索但不删除由此双端队列表示的队列的头部。此方法与peek的区别仅在于,如果此双端队列为空,则会抛出异常。此方法等效于
getFirst()。 -
peek
检索但不删除由此双端队列表示的队列的头部,如果此双端队列为空则返回null。此方法等效于
peekFirst()。 -
push
将一个元素推入由此双端队列表示的堆栈。换句话说,在此双端队列的前面插入元素。此方法等效于
addFirst(E)。- 指定由:
-
push在接口Deque<E> - 参数:
-
e- 要推入的元素 - 抛出:
-
NullPointerException- 如果指定的元素为null
-
pop
从由此双端队列表示的堆栈中弹出一个元素。换句话说,删除并返回此双端队列的第一个元素。此方法等效于
removeFirst()。- 指定由:
-
pop在接口Deque<E> - 返回:
- 此双端队列的前端(即由此双端队列表示的堆栈的顶部)的元素
- 抛出:
-
NoSuchElementException- 如果此双端队列为空
-
size
public int size()返回此双端队列中的元素数量。 -
isEmpty
public boolean isEmpty()如果此双端队列不包含任何元素,则返回true。- 指定者:
-
在接口中:
isEmptyCollection<E> - 覆盖:
-
在类中:
isEmptyAbstractCollection<E> - 返回:
-
如果此双端队列不包含任何元素,则返回
true
-
iterator
-
descendingIterator
从接口复制的描述:Deque以逆序顺序返回此双端队列中元素的迭代器。元素将按照从最后一个(尾部)到第一个(头部)的顺序返回。- 指定者:
-
在接口中:
descendingIteratorDeque<E> - 返回:
- 以逆序顺序返回此双端队列中元素的迭代器
-
spliterator
创建一个延迟绑定和快速失败的Spliterator,用于遍历此双端队列中的元素。Spliterator报告Spliterator.SIZED、Spliterator.SUBSIZED、Spliterator.ORDERED和Spliterator.NONNULL。重写实现应该记录额外特征值的报告。- 指定者:
-
在接口中:
spliteratorCollection<E> - 指定者:
-
在接口中:
spliteratorIterable<E> - 返回:
-
返回此双端队列中元素的
Spliterator - 自1.8起:
- 1.8
-
forEach
从接口复制的描述:Iterable对Iterable的每个元素执行给定操作,直到所有元素都已处理完或操作引发异常。如果指定了顺序,则按迭代顺序执行操作。操作引发的异常将传递给调用者。如果操作执行会修改元素的底层源,则此方法的行为是未指定的,除非覆盖类已指定并发修改策略。
- 指定者:
-
在接口中:
forEachIterable<E> - 参数:
-
action- 要对每个元素执行的操作 - 抛出:
-
NullPointerException- 如果指定的操作为null
-
removeIf
从接口复制的描述:Collection删除满足给定谓词的此集合的所有元素。在迭代期间抛出的错误或运行时异常或由谓词抛出的异常将传递给调用者。- 指定者:
-
在接口中:
removeIfCollection<E> - 参数:
-
filter- 返回true以删除元素的谓词 - 返回:
-
如果删除了任何元素,则返回
true - 抛出:
-
NullPointerException- 如果指定的过滤器为null
-
removeAll
从类复制的描述:AbstractCollection删除此集合中与指定集合中包含的所有元素相同的所有元素(可选操作)。调用此方法后,此集合将不包含与指定集合中的元素相同的任何元素。- 指定者:
-
在接口中:
removeAllCollection<E> - 覆盖:
-
在类中:
removeAllAbstractCollection<E> - 参数:
-
c- 包含要从此集合中删除的元素的集合 - 返回:
-
如果此集合由于调用而更改,则返回
true - 抛出:
-
NullPointerException- 如果此集合包含一个或多个null元素,而指定的集合不支持null元素(可选),或者指定的集合为null - 参见:
-
retainAll
从类复制的描述:AbstractCollection仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除不包含在指定集合中的所有元素。- 指定者:
-
在接口中:
retainAllCollection<E> - 覆盖:
-
在类中:
retainAllAbstractCollection<E> - 参数:
-
c- 包含要在此集合中保留的元素的集合 - 返回:
-
如果此集合由于调用而更改,则返回
true - 抛出:
-
NullPointerException- 如果此集合包含一个或多个null元素,而指定的集合不允许null元素(可选),或者指定的集合为null - 参见:
-
contains
如果此双端队列包含指定的元素,则返回true。更正式地说,仅当此双端队列包含至少一个元素e,使得o.equals(e)时返回true。- 指定者:
-
contains在接口Collection<E>中 - 指定者:
-
contains在接口Deque<E>中 - 覆盖:
-
contains在类AbstractCollection<E>中 - 参数:
-
o- 要在此双端队列中检查包含性的对象 - 返回值:
-
如果此双端队列包含指定元素,则返回
true
-
remove
从此双端队列中删除指定元素的单个实例。如果双端队列不包含该元素,则保持不变。更正式地说,删除第一个元素e,使得o.equals(e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列由于调用而更改)。- 指定者:
-
remove在接口Collection<E>中 - 指定者:
-
remove在接口Deque<E>中 - 覆盖:
-
remove在类AbstractCollection<E>中 - 参数:
-
o- 如果存在,则从此双端队列中删除的元素 - 返回值:
-
如果此双端队列包含指定元素,则返回
true
-
clear
public void clear()从此双端队列中删除所有元素。此调用返回后,双端队列将为空。- 指定者:
-
clear在接口Collection<E>中 - 覆盖:
-
clear在类AbstractCollection<E>中
-
toArray
返回一个包含此双端队列中所有元素的数组,按正确顺序排列(从第一个元素到最后一个元素)。返回的数组将是“安全”的,因为此双端队列不会保留对它的任何引用。(换句话说,此方法必须分配一个新数组)。因此,调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
- 指定者:
-
toArray在接口Collection<E>中 - 覆盖:
-
toArray在类AbstractCollection<E>中 - 返回值:
- 包含此双端队列中所有元素的数组
-
toArray
public <T> T[] toArray(T[] a) 返回一个包含此双端队列中所有元素的数组,按正确顺序排列(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的类型。如果双端队列适合指定数组,则将其返回。否则,将使用指定数组的运行时类型和此双端队列的大小分配一个新数组。如果此双端队列适合指定数组且有多余空间(即,数组的元素比此双端队列多),则在双端队列末尾之后的数组元素将设置为
null。与
toArray()方法一样,此方法充当基于数组和基于集合的API之间的桥梁。此外,此方法允许精确控制输出数组的运行时类型,并且在某些情况下可用于节省分配成本。假设
x是已知仅包含字符串的双端队列。可以使用以下代码将双端队列转储到新分配的String数组中:
请注意,String[] y = x.toArray(new String[0]);toArray(new Object[0])在功能上与toArray()相同。- 指定者:
-
toArray在接口Collection<E>中 - 覆盖:
-
toArray在类AbstractCollection<E>中 - 类型参数:
-
T- 包含集合的数组的组件类型 - 参数:
-
a- 如果足够大,则将双端队列的元素存储在其中的数组;否则,将为此目的分配相同运行时类型的新数组 - 返回值:
- 包含此双端队列中所有元素的数组
- 抛出:
-
ArrayStoreException- 如果指定数组的运行时类型不是此双端队列中每个元素的运行时类型的超类型 -
NullPointerException- 如果指定数组为null
-
clone
返回此双端队列的副本。
-