Deque接口,发音为“deck”,表示一个双端队列。Deque接口可以实现为各种类型的CollectionsDeque接口实现分为通用实现和并发实现。

通用双端队列实现

通用实现包括 LinkedListArrayDeque类。Deque接口支持两端元素的插入,删除和检索。ArrayDeque类是Deque接口的可调整大小的数组实现,而 LinkedList类是列表实现。
Deque接口addFirstaddLastremoveFirstremoveLastgetFirstgetLast中的基本插入,删除和重新绑定操作。addFirst方法在Deque实例的头部添加一个元素,而addLast方法在Deque实例的末尾添加一个元素。
LinkedList实现比ArrayDeque实现更灵活。LinkedList实现所有可选的列表操作。null元素允许在LinkedList实现中使用,但不允许在ArrayDeque实现中使用。
在效率方面,ArrayDequeLinkedList两端的添加和删除操作更有效。LinkedList实现中的最佳操作是在迭代过程中删除当前元素。LinkedList实现不是理想的迭代结构。
LinkedList实现比ArrayDeque实现消耗更多的内存。对ArrayDeque实例遍历,请使用以下任一方法:

foreach

foreach速度快,可用于各种列表。

  1. ArrayDeque<String> aDeque = new ArrayDeque<String>();
  2. . . .
  3. for (String str : aDeque) {
  4. System.out.println(str);
  5. }

迭代器

Iterator可用于所有类型的列表的各种数据的向前遍历。

  1. ArrayDeque<String> aDeque = new ArrayDeque<String>();
  2. . . .
  3. for (Iterator<String> iter = aDeque.iterator(); iter.hasNext(); ) {
  4. System.out.println(iter.next());
  5. }

本教程中使用ArrayDeque类来实现Deque接口。本教程中使用的示例的完整代码可在ArrayDequeSample中找到。LinkedListArrayDeque类都不支持多个线程的并发访问。

并发双端队列实现

LinkedBlockingDeque类是Deque接口的并发实现。如果双端队列为空,则诸如takeFirsttakeLast之类的方法将等到该元素变为可用之后,再检索并删除同一元素。