- 类型参数:
E- 此双端队列中包含的元素类型
- 所有已实现的接口:
Serializable,Cloneable,Iterable<E>,Collection<E>,Deque<E>,Queue<E>
Deque 接口的可调整大小数组实现。数组双端队列没有容量限制;它们会根据需要增长以支持使用。它们不是线程安全的;在没有外部同步的情况下,它们不支持多线程并发访问。禁止空元素。此类用作堆栈时可能比 Stack 快,用作队列时比 LinkedList 快。
大多数 ArrayDeque 操作以摊销常数时间运行。例外包括 remove 、 removeFirstOccurrence 、 removeLastOccurrence 、 contains 、 iterator.remove() 和批量操作,所有这些操作都在线性时间内运行。
此类的 iterator 方法返回的迭代器是 fail-fast :如果在创建迭代器后的任何时候修改双端队列,除了通过迭代器自己的 remove 方法以外的任何方式,迭代器通常会抛出一个 ConcurrentModificationException 。因此,面对并发修改,迭代器会快速干净地失败,而不是冒着在未来不确定的时间出现任意的、不确定的行为的风险。
请注意,无法保证迭代器的快速失败行为,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的正确性的程序是错误的:迭代器的快速失败行为应该只用于检测错误。
此类及其迭代器实现了 Collection 和 Iterator 接口的所有 optional 方法。
此类是 Java 集合框架 的成员。
- 自从:
- 1.6
- 参见:
-
构造方法总结
构造方法构造方法描述构造一个空数组双端队列,其初始容量足以容纳 16 个元素。ArrayDeque(int numElements) 构造一个空数组双端队列,其初始容量足以容纳指定数量的元素。ArrayDeque(Collection<? extends E> c) 构造一个包含指定集合元素的双端队列,按照集合迭代器返回元素的顺序。 -
方法总结
修饰符和类型方法描述boolean在此双端队列的末尾插入指定的元素。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()返回此双端队列中的元素数。在此双端队列中的元素上创建 late-binding 和 fail-fastSpliterator。Object[]toArray()以正确的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。<T> T[]toArray(T[] a) 以正确的顺序(从第一个元素到最后一个元素)返回一个包含此双端队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。在类 java.util.AbstractCollection 中声明的方法
containsAll, toString在接口 java.util.Collection 中声明的方法
containsAll, equals, hashCode, parallelStream, stream, toArray
-
构造方法详细信息
-
ArrayDeque
public ArrayDeque()构造一个空数组双端队列,其初始容量足以容纳 16 个元素。 -
ArrayDeque
public ArrayDeque(int numElements) 构造一个空数组双端队列,其初始容量足以容纳指定数量的元素。- 参数:
numElements- 双端队列初始容量的下限
-
ArrayDeque
构造一个包含指定集合元素的双端队列,按照集合迭代器返回元素的顺序。 (集合的迭代器返回的第一个元素成为第一个元素,或者正面双端队列的。)- 参数:
c- 其元素要放入双端队列的集合- 抛出:
NullPointerException- 如果指定的集合为空
-
-
方法详情
-
addFirst
在此双端队列的前面插入指定的元素。- 指定者:
addFirst在接口Deque<E>中- 参数:
e- 要添加的元素- 抛出:
NullPointerException- 如果指定元素为空
-
addLast
在此双端队列的末尾插入指定的元素。此方法等效于
add(E)。- 指定者:
addLast在接口Deque<E>中- 参数:
e- 要添加的元素- 抛出:
NullPointerException- 如果指定元素为空
-
addAll
将指定集合中的所有元素添加到此双端队列的末尾,就像对每个元素调用addLast(E)一样,按照集合的迭代器返回它们的顺序。- 指定者:
addAll在接口Collection<E>中- 指定者:
addAll在接口Deque<E>中- 重写:
addAll在类AbstractCollection<E>中- 参数:
c- 要插入到此双端队列中的元素- 返回:
true如果此双端队列因调用而改变- 抛出:
NullPointerException- 如果指定的集合或其任何元素为空- 参见:
-
offerFirst
在此双端队列的前面插入指定的元素。- 指定者:
offerFirst在接口Deque<E>中- 参数:
e- 要添加的元素- 返回:
true(由Deque.offerFirst(E)指定)- 抛出:
NullPointerException- 如果指定元素为空
-
offerLast
在此双端队列的末尾插入指定的元素。- 指定者:
offerLast在接口Deque<E>中- 参数:
e- 要添加的元素- 返回:
true(由Deque.offerLast(E)指定)- 抛出:
NullPointerException- 如果指定元素为空
-
removeFirst
从接口Deque复制的描述检索并删除此双端队列的第一个元素。此方法与pollFirst的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 指定者:
removeFirst在接口Deque<E>中- 返回:
- 这个双端队列的头
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
removeLast
从接口Deque复制的描述检索并删除此双端队列的最后一个元素。此方法与pollLast的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 指定者:
removeLast在接口Deque<E>中- 返回:
- 这个双端队列的尾巴
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
pollFirst
从接口Deque复制的描述检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回null。 -
pollLast
从接口Deque复制的描述检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。 -
getFirst
从接口Deque复制的描述检索但不删除此双端队列的第一个元素。此方法与peekFirst的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 指定者:
getFirst在接口Deque<E>中- 返回:
- 这个双端队列的头
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
getLast
从接口Deque复制的描述检索但不删除此双端队列的最后一个元素。此方法与peekLast的不同之处仅在于,如果此双端队列为空,它会抛出异常。- 指定者:
getLast在接口Deque<E>中- 返回:
- 这个双端队列的尾巴
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
peekFirst
从接口Deque复制的描述检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回null。 -
peekLast
从接口Deque复制的描述检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回null。 -
removeFirstOccurrence
移除此双端队列中第一次出现的指定元素(从头到尾遍历双端队列时)。如果双端队列不包含该元素,则它不变。更正式地说,删除第一个元素e这样o.equals(e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列因调用而更改)。- 指定者:
removeFirstOccurrence在接口Deque<E>中- 参数:
o- 要从此双端队列中删除的元素(如果存在)- 返回:
true如果双端队列包含指定的元素
-
removeLastOccurrence
删除此双端队列中最后一次出现的指定元素(从头到尾遍历双端队列时)。如果双端队列不包含该元素,则它不变。更正式地说,删除最后一个元素e这样o.equals(e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回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- 如果指定元素为空
-
offer
在此双端队列的末尾插入指定的元素。此方法等效于
offerLast(E)。- 指定者:
offer在接口Deque<E>中- 指定者:
offer在接口Queue<E>中- 参数:
e- 要添加的元素- 返回:
true(由Queue.offer(E)指定)- 抛出:
NullPointerException- 如果指定元素为空
-
remove
检索并删除由此双端队列表示的队列的头部。此方法与poll()的不同之处仅在于,如果此双端队列为空,它会抛出异常。此方法等效于
removeFirst()。 -
poll
检索并删除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回null。此方法等效于
pollFirst()。 -
element
检索但不删除由此双端队列表示的队列的头部。此方法与peek的不同之处仅在于,如果此双端队列为空,它会抛出异常。此方法等效于
getFirst()。 -
peek
检索但不删除由此双端队列表示的队列的头部,或者如果此双端队列为空则返回null。此方法等效于
peekFirst()。 -
push
将一个元素压入此双端队列所代表的堆栈。换句话说,将元素插入到这个双端队列的前面。此方法等效于
addFirst(E)。- 指定者:
push在接口Deque<E>中- 参数:
e- 要推送的元素- 抛出:
NullPointerException- 如果指定元素为空
-
pop
从此双端队列表示的堆栈中弹出一个元素。换句话说,删除并返回此双端队列的第一个元素。此方法等效于
removeFirst()。- 指定者:
pop在接口Deque<E>中- 返回:
- 此双端队列前面的元素(这是此双端队列表示的堆栈的顶部)
- 抛出:
NoSuchElementException- 如果这个双端队列是空的
-
size
public int size()返回此双端队列中的元素数。 -
isEmpty
public boolean isEmpty()如果此双端队列不包含任何元素,则返回true。- 指定者:
isEmpty在接口Collection<E>中- 重写:
isEmpty在类AbstractCollection<E>中- 返回:
true如果这个双端队列不包含任何元素
-
iterator
-
descendingIterator
从接口Deque复制的描述以相反的顺序返回此双端队列中元素的迭代器。元素将按从最后(尾)到第一个(头)的顺序返回。- 指定者:
descendingIterator在接口Deque<E>中- 返回:
- 以相反顺序遍历此双端队列中元素的迭代器
-
spliterator
在此双端队列中的元素上创建 late-binding 和 fail-fastSpliterator。Spliterator报告Spliterator.SIZED、Spliterator.SUBSIZED、Spliterator.ORDERED和Spliterator.NONNULL。覆盖实施应记录附加特征值的报告。- 指定者:
spliterator在接口Collection<E>中- 指定者:
spliterator在接口Iterable<E>中- 返回:
-
a
Spliterator在此双端队列中的元素上 - 自从:
- 1.8
-
forEach
从接口Iterable复制的描述对Iterable的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。如果指定了迭代顺序,则将按迭代顺序执行操作。操作抛出的异常被转发给调用者。如果操作执行修改元素的底层源的副作用,则此方法的行为是未指定的,除非重写类已指定并发修改策略。
- 指定者:
forEach在接口Iterable<E>中- 参数:
action- 对每个元素执行的操作- 抛出:
NullPointerException- 如果指定的操作为空
-
removeIf
从接口Collection复制的描述移除此集合中满足给定谓词的所有元素。迭代期间或由谓词抛出的错误或运行时异常将传递给调用者。- 指定者:
removeIf在接口Collection<E>中- 参数:
filter- 为要删除的元素返回true的谓词- 返回:
true如果删除了任何元素- 抛出:
NullPointerException- 如果指定的过滤器为空
-
removeAll
从类复制的描述:AbstractCollection删除此集合的所有也包含在指定集合中的元素(可选操作)。此调用返回后,此集合将不包含与指定集合共有的元素。- 指定者:
removeAll在接口Collection<E>中- 重写:
removeAll在类AbstractCollection<E>中- 参数:
c- 包含要从此集合中删除的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
NullPointerException- 如果此集合包含一个或多个空元素并且指定的集合不支持空元素 (optional),或者如果指定的集合为空- 参见:
-
retainAll
从类复制的描述:AbstractCollection仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中移除所有未包含在指定集合中的元素。- 指定者:
retainAll在接口Collection<E>中- 重写:
retainAll在类AbstractCollection<E>中- 参数:
c- 包含要保留在此集合中的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
NullPointerException- 如果此集合包含一个或多个空元素并且指定的集合不允许空元素 (optional),或者如果指定的集合为空- 参见:
-
contains
如果此双端队列包含指定元素,则返回true。更正式地说,返回true当且仅当此双端队列包含至少一个元素e使得o.equals(e)。- 指定者:
contains在接口Collection<E>中- 指定者:
contains在接口Deque<E>中- 重写:
contains在类AbstractCollection<E>中- 参数:
o- 要检查此双端队列中包含的对象- 返回:
true如果这个双端队列包含指定的元素
-
remove
从此双端队列中移除指定元素的单个实例。如果双端队列不包含该元素,则它不变。更正式地说,删除第一个元素e这样o.equals(e)(如果存在这样的元素)。如果此双端队列包含指定元素,则返回true(或者等效地,如果此双端队列因调用而更改)。此方法等效于
removeFirstOccurrence(Object)。- 指定者:
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- 如果指定数组为空
-
clone
返回此双端队列的副本。
-