# Deque 实现 > 原文: [https://docs.oracle.com/javase/tutorial/collections/implementations/deque.html](https://docs.oracle.com/javase/tutorial/collections/implementations/deque.html) `Deque`接口,发音为*“deck”*,表示双端队列。 `Deque`接口可以实现为各种类型的`Collections`。 `Deque`接口实现分为通用和并发实现。 ## 通用 Deque 实现 通用实现包括`LinkedList`和`ArrayDeque`类。 `Deque`接口支持两端元素的插入,移除和检索。 [`ArrayDeque`](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html) 类是`Deque`接口的可调整大小的数组实现,而 [`LinkedList`](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html) 类是列表实现。 `Deque`接口`addFirst`,`addLast`,`removeFirst`,`removeLast`,`getFirst`和`getLast`的基本插入,移除和回溯操作。方法`addFirst`在头部添加元素,而`addLast`在`Deque`实例的尾部添加元素。 `LinkedList`实现比`ArrayDeque`实现更灵活。 `LinkedList`实现所有可选列表操作。 `null`实现中允许`null`元素,但`ArrayDeque`实现中不允许。 在效率方面,`ArrayDeque`比`LinkedList`在两端添加和删除操作更有效。 `LinkedList`实现中的最佳操作是在迭代期间删除当前元素。 `LinkedList`实现不是迭代的理想结构。 `LinkedList`实现比`ArrayDeque`实现消耗更多内存。对于`ArrayDeque`实例遍历,请使用以下任何一种方法: ### 的 foreach `foreach`速度快,可用于各种列表。 ```java ArrayDeque aDeque = new ArrayDeque(); . . . for (String str : aDeque) { System.out.println(str); } ``` ### 迭代器 `Iterator`可用于各类数据的各种列表的正向遍历。 ```java ArrayDeque aDeque = new ArrayDeque(); . . . for (Iterator iter = aDeque.iterator(); iter.hasNext(); ) { System.out.println(iter.next()); } ``` 本教程中使用`ArrayDeque`类来实现`Deque`接口。本教程中使用的示例的完整代码可在 [``ArrayDequeSample``](../interfaces/examples/ArrayDequeSample.java)中找到。 `LinkedList`和`ArrayDeque`类都不支持多线程的并发访问。 ## 并发 Deque 实现 [`LinkedBlockingDeque`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingDeque.html) 类是`Deque`接口的并发实现。如果 deque 为空,则`takeFirst`和`takeLast`等方法会等到元素变为可用,然后检索并删除相同的元素。