文档

Java™ 教程-Java Tutorials 中文版
Deque 实现
Trail: Collections
Lesson: Implementations

Deque 实现

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

通用 Deque 实现

通用实现包括 LinkedListArrayDeque 类。Deque 接口支持在两端插入,移除和获取元素。ArrayDeque 类是 Deque 接口的可调整大小的数组实现,而 LinkedList 类是列表实现。

Deque 接口的基本插入,移除和获取操作 addFirstaddLastremoveFirstremoveLastgetFirstgetLast。方法 addFirst 在头部添加元素,而 addLastDeque 实例的尾部添加元素。

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

在效率方面,ArrayDequeLinkedList 更有效,可以在两端添加和移除操作。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 类来实现 Deque 接口。本教程中使用的示例的完整代码可在 ArrayDequeSample 中找到。LinkedListArrayDeque 类都不支持多个线程的并发访问。

并发 Deque 实现

LinkedBlockingDeque 类是 Deque 接口的并发实现。如果 deque 为空,那么诸如 takeFirsttakeLast 之类的方法会等到元素变为可用,然后获取并移除相同的元素。


Previous page: Queue Implementations
Next page: Wrapper Implementations