java.lang.Object java.util.AbstractCollection<E> java.util.ArrayDeque<E>
E
- the type of elements held in this collection
public class ArrayDeque<E>
Deque
接口的大小可变数组的实现。数组双端队列没有容量限制;它们可根据需要增加以支持使用。它们不是线程安全的;在没有外部同步时,它们不支持多个线程的并发访问。禁止 null 元素。此类很可能在用作堆栈时快于 Stack
,在用作队列时快于 LinkedList
。
大多数 ArrayDeque 操作以摊销的固定时间运行。异常包括 remove
、removeFirstOccurrence
、removeLastOccurrence
、contains
、iterator.remove()
以及批量操作,它们均以线性时间运行。
此类的 iterator 方法返回的迭代器是快速失败 的:如果在创建迭代器后的任意时间通过除迭代器本身的 remove 方法之外的任何其他方式修改了双端队列,则迭代器通常将抛出 ConcurrentModificationException
。因此,面对并发修改,迭代器很快就会完全失败,而不是冒着在将来不确定的时刻任意发生不确定行为的风险。
注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。
此类及其迭代器实现 Collection
和 Iterator
接口的所有可选 方法。
此类是 Java Collections Framework 的成员。
构造方法摘要 | |
---|---|
ArrayDeque() 构造一个初始容量能够容纳 16 个元素的空数组双端队列。 |
|
ArrayDeque(Collection<? extends E> c) 构造一个包含指定 collection 的元素的双端队列,这些元素按 collection 的迭代器返回的顺序排列。 |
|
ArrayDeque(int numElements) 构造一个初始容量能够容纳指定数量的元素的空数组双端队列。 |
方法摘要 | ||
---|---|---|
boolean |
add(E e) 将指定元素插入此双端队列的末尾。 |
|
void |
addFirst(E e) 将指定元素插入此双端队列的开头。 |
|
void |
addLast(E e) 将指定元素插入此双端队列的末尾。 |
|
void |
clear() 从此双端队列中移除所有元素。 |
|
ArrayDeque<E> |
clone() 返回此双端队列的副本。 |
|
boolean |
contains(Object o) 如果此双端队列包含指定元素,则返回 true。 |
|
Iterator<E> |
descendingIterator() 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。 |
|
E |
element() 获取,但不移除此双端队列所表示的队列的头。 |
|
E |
getFirst() 获取,但不移除此双端队列的第一个元素。 |
|
E |
getLast() 获取,但不移除此双端队列的最后一个元素。 |
|
boolean |
isEmpty() 如果此双端队列未包含任何元素,则返回 true。 |
|
Iterator<E> |
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() 返回此双端队列中的元素数。 |
|
Object[] |
toArray() 返回一个以恰当顺序包含此双端队列所有元素的数组(从第一个元素到最后一个元素)。 |
|
|
toArray(T[] a) 返回一个以恰当顺序包含此双端队列所有元素的数组(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的运行时类型。 |
从类 java.util.AbstractCollection 继承的方法 |
---|
addAll, containsAll, removeAll, retainAll, toString |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
从接口 java.util.Collection 继承的方法 |
---|
addAll, containsAll, equals, hashCode, removeAll, retainAll |
构造方法详细信息 |
---|
public ArrayDeque()
public ArrayDeque(int numElements)
numElements
- 双端队列初始容量的下边界
public ArrayDeque(Collection<? extends E> c)
c
- 要将其元素放入双端队列的 collection
NullPointerException
- 如果指定 collection 为 null
方法详细信息 |
---|
public void addFirst(E e)
e
- 要添加的元素
NullPointerException
- 如果指定元素为 null
public void addLast(E e)
此方法等效于 add(E)
。
e
- 要添加的元素
NullPointerException
- 如果指定元素为 null
public boolean offerFirst(E e)
Deque<E>
中的
offerFirst
e
- 要添加的元素
Deque.offerFirst(E)
的规定)
NullPointerException
- 如果指定元素为 null
public boolean offerLast(E e)
e
- 要添加的元素
Deque.offerLast(E)
的规定)
NullPointerException
- 如果指定元素为 null
public E removeFirst()
Deque
复制的描述
pollFirst
唯一的不同在于:如果此双端队列为空,它将抛出一个异常。
Deque<E>
中的
removeFirst
NoSuchElementException
- 如果此双端队列为空
public E removeLast()
Deque
复制的描述
pollLast
唯一的不同在于:如果此双端队列为空,它将抛出一个异常。
Deque<E>
中的
removeLast
NoSuchElementException
- 如果此双端队列为空
public E pollFirst()
Deque
复制的描述
public E pollLast()
Deque
复制的描述
public E getFirst()
Deque
复制的描述
peekFirst
唯一的不同在于:如果此双端队列为空,它将抛出一个异常。
NoSuchElementException
- 如果此双端队列为空
public E getLast()
Deque
复制的描述
peekLast
唯一的不同在于:如果此双端队列为空,它将抛出一个异常。
NoSuchElementException
- 如果此双端队列为空
public E peekFirst()
Deque
复制的描述
public E peekLast()
Deque
复制的描述
public boolean removeFirstOccurrence(Object o)
Deque<E>
中的
removeFirstOccurrence
o
- 要从此双端队列中移除的元素(如果存在)
public boolean removeLastOccurrence(Object o)
Deque<E>
中的
removeLastOccurrence
o
- 要从此双端队列中移除的元素(如果存在)
public boolean add(E e)
此方法等效于 addLast(E)
。
e
- 要添加的元素
Collection.add(E)
的规定)
NullPointerException
- 如果指定元素为 null
public boolean offer(E e)
此方法等效于 offerLast(E)
。
e
- 要添加的元素
Queue.offer(E)
的规定)
NullPointerException
- 如果指定元素为 null
public E remove()
poll
的不同之处在于:如果此双端队列为空,它将抛出一个异常。
此方法等效于 removeFirst()
。
NoSuchElementException
- 如果此双端队列为空
public E poll()
此方法等效于 pollFirst()
。
public E element()
peek
的不同之处在于:如果此双端队列为空,它将抛出一个异常。
此方法等效于 getFirst()
。
NoSuchElementException
- 如果此双端队列为空
public E peek()
此方法等效于 peekFirst()
。
public void push(E e)
此方法等效于 addFirst(E)
。
e
- 要推入的元素
NullPointerException
- 如果指定元素为 null
public E pop()
此方法等效于 removeFirst()
。
NoSuchElementException
- 如果此双端队列为空
public int size()
Collection<E>
中的
size
Deque<E>
中的
size
AbstractCollection<E>
中的
size
public boolean isEmpty()
Collection<E>
中的
isEmpty
AbstractCollection<E>
中的
isEmpty
public Iterator<E> iterator()
remove()
)或弹出(通过连续调用
pop()
)的顺序相同。
public Iterator<E> descendingIterator()