Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
Deque 接口,发音为 "deck",表示双端队列。Deque 接口可以实现为各种类型的 Collections。Deque 接口实现分为通用和并发实现。
通用实现包括 LinkedList 和 ArrayDeque 类。Deque 接口支持在两端插入,移除和获取元素。ArrayDeque 类是 Deque 接口的可调整大小的数组实现,而 LinkedList 类是列表实现。
Deque 接口的基本插入,移除和获取操作 addFirst,addLast,removeFirst,removeLast,getFirst 和 getLast。方法 addFirst 在头部添加元素,而 addLast 在 Deque 实例的尾部添加元素。
LinkedList 实现比 ArrayDeque 实现更灵活。LinkedList 实现所有可选列表操作。null 元素在 LinkedList 实现中是允许的,但在 ArrayDeque 实现中不允许。
在效率方面,ArrayDeque 比 LinkedList 更有效,可以在两端添加和移除操作。LinkedList 实现中的最佳操作是在迭代期间移除当前元素。LinkedList 实现不是迭代的理想结构。
LinkedList 实现比 ArrayDeque 实现消耗更多内存。对于 ArrayDeque 实例遍历,请使用以下任何一种方法:
foreach 速度很快,可用于各种列表。
ArrayDeque<String> aDeque = new ArrayDeque<String>();
. . .
for (String str : aDeque) {
System.out.println(str);
}
Iterator 可用于各类数据的各种列表的正向遍历。
ArrayDeque<String> aDeque = new ArrayDeque<String>();
. . .
for (Iterator<String> iter = aDeque.iterator(); iter.hasNext(); ) {
System.out.println(iter.next());
}
本教程中使用 ArrayDeque 类来实现 Deque 接口。本教程中使用的示例的完整代码可在 中找到。ArrayDequeSampleLinkedList 和 ArrayDeque 类都不支持多个线程的并发访问。
LinkedBlockingDeque 类是 Deque 接口的并发实现。如果 deque 为空,那么诸如 takeFirst 和 takeLast 之类的方法会等到元素变为可用,然后获取并移除相同的元素。