接口的Deque可调整大小数组实现阵列 deques 没有容量限制; 它们根据需要增长以支持使用。它们不是线程安全的; 在没有外部同步的情况下,它们不支持多个线程的并发访问。禁止使用 null 元素。 此类可能比用作堆栈时更快,并且比StackLinkedList用作队列时更快。
大多数ArrayDeque操作在摊销的恒定时间内运行。例外情况包括 remove、 、 、 removeLastOccurrenceremoveFirstOccurrencecontains和iterator.remove()批量操作,所有这些操作都以线性时间运行。
此类 iterator 方法返回的迭代器是 快速失败的:如果在创建迭代器后的任何时间修改了 deque,则 remove 迭代器通常会抛出一个 ConcurrentModificationException.因此,在面对并发修改时,迭代器会快速而干净地失败,而不是冒着在未来不确定的时间出现任意的、非确定性行为的风险。
请注意,无法保证迭代器的快速失效行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬性保证。快速失败的迭代器 ConcurrentModificationException 会尽力而为。因此,编写一个依赖于此异常的程序的正确性是错误的: 迭代器的快速失败行为应该只用于检测错误。
此类及其迭代器实现 and Iterator 接口的所有可选方法Collection。

代码

/**  
 * 存储 deque 元素的数组。
 * deque 的容量是这个数组的长度,它总是 2 的幂。
 * 数组永远不会变满,除非在 addX 方法中暂时变满,在变满后立即调整其大小(参见 doubleCapacity),从而避免头部和尾部环绕以相互相等。
 * 我们还保证所有不包含 deque 元素的数组单元始终为 null
 **/
 transient Object[] elements;