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
接口。本教程中使用的示例的完整代码可在
中找到。ArrayDequeSample
LinkedList
和 ArrayDeque
类都不支持多个线程的并发访问。
LinkedBlockingDeque
类是 Deque
接口的并发实现。如果 deque 为空,那么诸如 takeFirst
和 takeLast
之类的方法会等到元素变为可用,然后获取并移除相同的元素。