Deque Implementations

Dequeinterface,发音为*“ deck” *,表示 deque。 Dequeinterface可以实现为各种类型的CollectionsDequeinterface实现分为通用实现和并发实现。

通用 deque 实现

通用实现包括LinkedListArrayDeque类。 Dequeinterface支持两端元素的插入,删除和检索。 ArrayDeque类是Dequeinterface的可调整大小的数组实现,而LinkedList类是列表实现。

DequeinterfaceaddFirstaddLastremoveFirstremoveLastgetFirstgetLast的基本插入,删除和检索操作。 addFirst方法在Deque实例的末尾添加元素,而addLast添加在Deque实例的末尾元素。

LinkedList实现比ArrayDeque实现更灵活。 LinkedList实现所有可选的列表操作。 LinkedList实现中允许null元素,但ArrayDeque实现中不允许。

在效率方面,ArrayDeque的效率要比LinkedList的两端都要高。 LinkedList实现中的最佳操作是在迭代过程中删除当前元素。 LinkedList实现不是理想的迭代结构。

LinkedList实现比ArrayDeque实现消耗更多的内存。对于ArrayDeque实例遍历,请使用以下任一方法:

foreach

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

ArrayDeque<String> aDeque = new ArrayDeque<String>();

. . .
for (String str : aDeque) {
    System.out.println(str);
}

Iterator

Iterator可用于对各种数据的各种列表进行正向遍历。

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

本教程中使用ArrayDeque类来实现Dequeinterface。 ArrayDequeSample中提供了本教程中使用的示例的完整代码。 LinkedListArrayDeque类都不支持多个线程的并发访问。

并发 deque 实现

LinkedBlockingDeque类是Dequeinterface的并发实现。如果 deque 为空,则诸如takeFirsttakeLast之类的方法将等到该元素变为可用为止,然后检索并删除同一元素。