鸿蒙OS ArrayDeque
ArrayDeque
java.lang.Object
|---java.util.AbstractCollection<E&
|---|---java.util.ArrayDeque<E&
public class ArrayDeque<E>
extends AbstractCollection<E>
implements Deque<E>, Cloneable, Serializable
Deque 接口的可调整大小的数组实现。 数组双端队列没有容量限制; 它们会根据需要增长以支持使用。 它们不是线程安全的; 在没有外部同步的情况下,它们不支持多线程并发访问。 禁止使用空元素。 这个类在作为栈使用时可能比 Stack 快,作为队列使用时比 LinkedList 快。
大多数 ArrayDeque 操作在摊销的常数时间内运行。 例外情况包括 remove、removeFirstOccurrence、removeLastOccurrence、contains、iterator.remove() 和批量操作,所有这些操作都以线性时间运行。
此类的迭代器方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间对双端队列进行了修改,除了通过迭代器自己的 remove 方法之外的任何方式,迭代器通常会抛出 ConcurrentModificationException。 因此,面对并发修改,迭代器快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。
请注意,不能保证迭代器的快速失败行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬保证。 快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException。 因此,编写一个依赖于这个异常的正确性的程序是错误的:迭代器的快速失败行为应该只用于检测错误。
此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选方法。
此类是 Java 集合框架的成员。
构造函数摘要
构造函数 | 描述 |
---|---|
ArrayDeque() | 构造一个空数组双端队列,其初始容量足以容纳 16 个元素。 |
ArrayDeque(int numElements) | 构造一个空数组双端队列,其初始容量足以容纳指定数量的元素。 |
ArrayDeque(Collection<? extends E> c) | 按照集合的迭代器返回的顺序构造一个包含指定集合元素的双端队列。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
boolean | add(E e) | 在此双端队列的末尾插入指定的元素。 |
void | addFirst(E e) | 在此双端队列的前面插入指定元素。 |
void | addLast(E e) | 在此双端队列的末尾插入指定的元素。 |
void | clear() | 从此双端队列中删除所有元素。 |
ArrayDequeE | clone() | 返回此双端队列的副本。 |
boolean | contains(Object o) | 如果此双端队列包含指定元素,则返回 true。 |
IteratorE | descendingIterator() | 以相反的顺序返回此双端队列中元素的迭代器。 |
E | element() | 检索但不删除此双端队列表示的队列的头部。 |
E | getFirst() | 检索但不删除此双端队列的第一个元素。 |
E | getLast() | 检索但不删除此双端队列的最后一个元素。 |
boolean | isEmpty() | 如果此双端队列不包含任何元素,则返回 true。 |
IteratorE | iterator() | 返回此双端队列中元素的迭代器。 |
boolean | offer(E e) | 在此双端队列的末尾插入指定的元素。 |
boolean | offerFirst(E e) | 在此双端队列的前面插入指定元素。 |
boolean | offerLast(E e) | 在此双端队列的末尾插入指定的元素。 |
E | peek() | 检索但不删除此双端队列表示的队列的头部,如果此双端队列为空,则返回 null。 |
E | peekFirst() | 检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回 null。 |
E | peekLast() | 检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。 |
E | poll() | 检索并删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回 null。 |
E | pollFirst() | 检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回 null。 |
E | pollLast() | 检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。 |
E | pop() | 从这个双端队列表示的堆栈中弹出一个元素。 |
void | push(E e) | 将元素推送到此双端队列表示的堆栈上。 |
E | remove() | 检索并删除此双端队列表示的队列的头部。 |
boolean | remove(Object o) | 从此双端队列中移除指定元素的单个实例。 |
E | removeFirst() | 检索并删除此双端队列的第一个元素。 |
boolean | removeFirstOccurrence(Object o) | 删除此双端队列中第一次出现的指定元素(从头到尾遍历双端队列时)。 |
E | removeLast() | 检索并删除此双端队列的最后一个元素。 |
boolean | removeLastOccurrence(Object o) | 删除此双端队列中最后一次出现的指定元素(从头到尾遍历双端队列时)。 |
int | size() | 返回此双端队列中的元素数。 |
SpliteratorE | spliterator() | 在此双端队列中的元素上创建一个后期绑定和快速失败的拆分器。 |
Object[] | toArray() | 以正确的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。 |
<T> T[] | toArray(T[] a) | 以正确的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 |
从类 java.util.AbstractCollection 继承的方法 |
---|
addAll, containsAll, removeAll, retainAll, toString |
从接口 java.util.Collection 继承的方法 |
---|
addAll, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, stream |
从接口 java.lang.Iterable 继承的方法 |
---|
forEach |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造函数详细信息
ArrayDeque
public ArrayDeque()
构造一个空数组双端队列,其初始容量足以容纳 16 个元素。
ArrayDeque
public ArrayDeque(int numElements)
构造一个空数组双端队列,其初始容量足以容纳指定数量的元素。
参数:
参数名称 | 参数描述 |
---|---|
numElements | 双端队列初始容量的下限 |
ArrayDeque
public ArrayDeque(Collection<? extends E> c)
按照集合的迭代器返回的顺序构造一个包含指定集合元素的双端队列。 (集合的迭代器返回的第一个元素成为第一个元素,或双端队列的前面。)
参数:
参数名称 | 参数描述 |
---|---|
c | 将其元素放入双端队列的集合 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定的集合为空 |
方法详情
addFirst
public void addFirst(E e)
在此双端队列的前面插入指定元素。
指定者:
接口 DequeE 中的 addFirst
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
addLast
public void addLast(E e)
在此双端队列的末尾插入指定的元素。
此方法等效于 add(E)。
指定者:
接口 DequeE 中的 addLast
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
offerFirst
public boolean offerFirst(E e)
在此双端队列的前面插入指定元素。
指定者:
接口 DequeE 中的 offerFirst
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Deque#offerFirst 指定)
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
offerLast
public boolean offerLast(E e)
在此双端队列的末尾插入指定的元素。
指定者:
接口 DequeE 中的 offerLast
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Deque#offerLast 指定)
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
removeFirst
public E removeFirst()
从接口复制的描述:双端队列
检索并删除此双端队列的第一个元素。 此方法与 pollFirst 的不同之处仅在于如果此双端队列为空,它将引发异常。
指定者:
接口 DequeE 中的 removeFirst
返回:
这个双端队列的头
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
removeLast
public E removeLast()
从接口复制的描述:双端队列
检索并删除此双端队列的最后一个元素。 此方法与 pollLast 的不同之处仅在于如果此双端队列为空,它将引发异常。
指定者:
接口 DequeE 中的 removeLast
返回:
这个双端队列的尾巴
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
pollFirst
public E pollFirst()
从接口复制的描述:双端队列
检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回 null。
指定者:
接口 DequeE 中的 pollFirst
返回:
此双端队列的头部,如果此双端队列为空,则返回 null
pollLast
public E pollLast()
从接口复制的描述:双端队列
检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。
指定者:
接口 DequeE 中的 pollLast
返回:
此双端队列的尾部,如果此双端队列为空,则返回 null
getFirst
public E getFirst()
从接口复制的描述:双端队列
检索但不删除此双端队列的第一个元素。 此方法与 peekFirst 的不同之处仅在于如果此双端队列为空,它将引发异常。
指定者:
接口 DequeE 中的 getFirst
返回:
这个双端队列的头
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
getLast
public E getLast()
从接口复制的描述:双端队列
检索但不删除此双端队列的最后一个元素。 此方法与 peekLast 的不同之处仅在于如果此双端队列为空,它将引发异常。
指定者:
接口 DequeE 中的 getLast
返回:
这个双端队列的尾巴
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
peekFirst
public E peekFirst()
从接口复制的描述:双端队列
检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回 null。
指定者:
接口 DequeE 中的 peekFirst
返回:
此双端队列的头部,如果此双端队列为空,则返回 null
peekLast
public E peekLast()
从接口复制的描述:双端队列
检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。
指定者:
接口 DequeE 中的 peekLast
返回:
此双端队列的尾部,如果此双端队列为空,则返回 null
removeFirstOccurrence
public boolean removeFirstOccurrence(Object o)
删除此双端队列中第一次出现的指定元素(从头到尾遍历双端队列时)。 如果双端队列不包含该元素,则它保持不变。 更正式地说,删除第一个元素 e 使得 o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定元素(或等效地,如果此双端队列因调用而更改),则返回 true。
指定者:
接口 DequeE 中的 removeFirstOccurrence
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此双端队列中删除的元素(如果存在) |
返回:
如果双端队列包含指定的元素,则为true
removeLastOccurrence
public boolean removeLastOccurrence(Object o)
删除此双端队列中最后一次出现的指定元素(从头到尾遍历双端队列时)。 如果双端队列不包含该元素,则它保持不变。 更正式地说,删除最后一个元素 e 使得 o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定元素(或等效地,如果此双端队列因调用而更改),则返回 true。
指定者:
接口 DequeE 中的 removeLastOccurrence
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此双端队列中删除的元素(如果存在) |
返回:
如果双端队列包含指定的元素,则为true
add
public boolean add(E e)
在此双端队列的末尾插入指定的元素。
此方法等效于 addLast(E)。
指定者:
添加接口CollectionE
指定者:
添加接口 DequeE
指定者:
添加接口QueueE
覆盖:
添加类 AbstractCollectionE
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Collection#add 指定)
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
offer
public boolean offer(E e)
在此双端队列的末尾插入指定的元素。
此方法等效于 offerLast(E)。
指定者:
在接口 DequeE 中提供
指定者:
接口QueueE中的offer
参数:
参数名称 | 参数描述 |
---|---|
e | 要添加的元素 |
返回:
true(由 Queue#offer 指定)
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
remove
public E remove()
检索并删除此双端队列表示的队列的头部。 此方法与 poll 的不同之处仅在于如果此双端队列为空,它将引发异常。
此方法等效于 removeFirst()。
指定者:
在接口 DequeE 中移除
指定者:
在接口 QueueE 中删除
返回:
此双端队列表示的队列的头部
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
poll
public E poll()
检索并删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回 null。
此方法等效于 pollFirst()。
指定者:
接口 DequeE 中的轮询
指定者:
在接口 QueueE 中轮询
返回:
此双端队列表示的队列的头部,如果此双端队列为空,则返回 null
element
public E element()
检索但不删除此双端队列表示的队列的头部。 此方法与 peek 的不同之处仅在于如果此双端队列为空,它将引发异常。
此方法等效于 getFirst()。
指定者:
接口 DequeE 中的元素
指定者:
接口 QueueE 中的元素
返回:
此双端队列表示的队列的头部
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
peek
public E peek()
检索但不删除此双端队列表示的队列的头部,如果此双端队列为空,则返回 null。
此方法等效于 peekFirst()。
指定者:
查看界面 DequeE
指定者:
查看接口 QueueE
返回:
此双端队列表示的队列的头部,如果此双端队列为空,则返回 null
push
public void push(E e)
将元素推送到此双端队列表示的堆栈上。 换句话说,在这个双端队列的前面插入元素。
此方法等效于 addFirst(E)。
指定者:
推入接口 DequeE
参数:
参数名称 | 参数描述 |
---|---|
e | 要推动的元素 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果指定元素为空 |
pop
public E pop()
从这个双端队列表示的堆栈中弹出一个元素。 换句话说,删除并返回此双端队列的第一个元素。
此方法等效于 removeFirst()。
指定者:
弹出界面DequeE
返回:
这个双端队列前面的元素(这是这个双端队列表示的堆栈的顶部)
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此双端队列为空 |
size
public int size()
返回此双端队列中的元素数。
指定者:
接口 CollectionE 中的大小
指定者:
接口 DequeE 中的大小
指定者:
AbstractCollectionE 类中的大小
返回:
此双端队列中的元素数量
isEmpty
public boolean isEmpty()
如果此双端队列不包含任何元素,则返回 true。
指定者:
接口 CollectionE 中的 isEmpty
覆盖:
类 AbstractCollectionE 中的 isEmpty
返回:
如果此双端队列不包含任何元素,则为 true
iterator
public IteratorE iterator()
返回此双端队列中元素的迭代器。 元素将从第一个(头)到最后一个(尾)排序。 这与元素出列(通过连续调用 remove() 或弹出(通过连续调用 pop())的顺序相同。
指定者:
接口 CollectionE 中的迭代器
指定者:
接口 DequeE 中的迭代器
指定者:
接口 IterableE 中的迭代器
指定者:
AbstractCollectionE 类中的迭代器
返回:
此双端队列中元素的迭代器
descendingIterator
public IteratorE descendingIterator()
从接口复制的描述:双端队列
以相反的顺序返回此双端队列中元素的迭代器。 元素将按从最后(尾)到第一个(头)的顺序返回。
指定者:
DequeE 接口中的 descendingIterator
返回:
以相反顺序对该双端队列中的元素进行迭代
contains
public boolean contains(Object o)
如果此双端队列包含指定元素,则返回 true。 更正式地说,当且仅当此双端队列包含至少一个元素 e 使得 o.equals(e) 时才返回 true。
指定者:
包含在接口 CollectionE 中
指定者:
包含在接口 DequeE
覆盖:
包含在类 AbstractCollectionE 中
参数:
参数名称 | 参数描述 |
---|---|
o | 要检查此双端队列中包含的对象 |
返回:
如果此双端队列包含指定元素,则为 true
remove
public boolean remove(Object o)
从此双端队列中移除指定元素的单个实例。 如果双端队列不包含该元素,则它保持不变。 更正式地说,删除第一个元素 e 使得 o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定元素(或等效地,如果此双端队列因调用而更改),则返回 true。
此方法等效于 removeFirstOccurrence(java.lang.Object)。
指定者:
在接口 CollectionE 中删除
指定者:
在接口 DequeE 中移除
覆盖:
在类 AbstractCollectionE 中删除
参数:
参数名称 | 参数描述 |
---|---|
o | 要从此双端队列中删除的元素(如果存在) |
返回:
如果此双端队列包含指定元素,则为 true
clear
public void clear()
从此双端队列中删除所有元素。 此调用返回后,双端队列将为空。
指定者:
在界面 CollectionE 中清除
覆盖:
在类 AbstractCollectionE 中清除
toArray
public Object[] toArray()
以正确的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。
返回的数组将是“安全的”,因为此双端队列不维护对它的引用。 (换句话说,这个方法必须分配一个新数组)。 因此,调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的 API 之间的桥梁。
指定者:
接口 CollectionE 中的 toArray
覆盖:
AbstractCollectionE 类中的 toArray
返回:
包含此双端队列中所有元素的数组
toArray
public <T> T[] toArray(T[] a)
以正确的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 如果双端队列适合指定的数组,则在其中返回。 否则,将使用指定数组的运行时类型和此双端队列的大小分配一个新数组。
如果此双端队列适合指定的数组并有剩余空间(即,该数组的元素多于该双端队列),则紧随双端队列末尾的数组中的元素设置为 null。
与 toArray() 方法一样,此方法充当基于数组的 API 和基于集合的 API 之间的桥梁。 此外,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下可用于节省分配成本。
假设 x 是一个已知只包含字符串的双端队列。 以下代码可用于将双端队列转储到新分配的字符串数组中:
String[] y = x.toArray(new String[0]);
请注意,toArray(new Object[0]) 在功能上与 toArray() 相同。
指定者:
接口 CollectionE 中的 toArray
覆盖:
AbstractCollectionE 类中的 toArray
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
T | 包含集合的数组的运行时类型 |
参数:
参数名称 | 参数描述 |
---|---|
a | 如果足够大,则要存储双端队列元素的数组; 否则,将为此目的分配相同运行时类型的新数组 |
返回:
包含此双端队列中所有元素的数组
Throws:
Throw名称 | Throw描述 |
---|---|
ArrayStoreException | 如果指定数组的运行时类型不是此双端队列中每个元素的运行时类型的超类型 |
NullPointerException | 如果指定的数组为空 |
clone
public ArrayDequeE clone()
返回此双端队列的副本。
覆盖:
在类 Object 中克隆
返回:
这个双端队列的副本
spliterator
public SpliteratorE spliterator()
在此双端队列中的元素上创建一个后期绑定和快速失败的拆分器。
Spliterator 报告 Spliterator#SIZED、Spliterator#SUBSIZED、Spliterator#ORDERED 和 Spliterator#NONNULL。 覆盖实现应记录附加特征值的报告。
指定者:
接口 CollectionE 中的分离器
指定者:
接口 IterableE 中的分离器
返回:
此双端队列中元素的拆分器