阅读(4063) (0)

鸿蒙OS ArrayDeque

2022-06-16 16:19:24 更新

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 中的分离器

返回:

此双端队列中元素的拆分器