1、ArrayDeque
Deque接口的一种可改变大小的实现,数组deque没有容量限制,可以根据需要增加容量。是非线程安全的;如果没有外同步,它不支持多线程的并发访问。不允许元素为null,该类用作栈或队列时,比Stack和LinkedList都要快。ArrayDeque的大多数操作需要分摊的常量时间复杂度(amortezed constant time),例外的有remove、removeFirstOccurrence、removeLastOccurrence、contains和iterator.remove()方法,以及批量操作,所有这些都是只需要线性时间复杂度(linear time)。
迭代器的返回通过使用iterator方法是快速失败的(fast-fail) ,即如果创建iterator后,deque在任何时间被除了迭代器自己的remove方法修改了,iterator通常会抛出ConcurrentModificationException异常。因此,对于并发修改,迭代器会快速干净地失败,而不会产生任何危害,当未来在不确定的时间发生不确定性的行为。注意,迭代器的fail-fast行为并不能硬性地保证任何非同步的并发修改时都会发生,fail-fast在最大努力的基础上抛出ConcurrentModificationException异常。因此,如果程序依赖于作为判断正确与否的依据是不正确的,fail-fast只能用作检测错误。
该类和其迭代器实现了Collection接口和Iterator接口的所有可选方法。
2、ConcurrentLinkedListDeque
一种基于链表的无边界的并发Deque。并发插入、移除和访