Deque
接口,发音为“deck”,表示一个双端队列。Deque
接口可以实现为各种类型的Collections
。Deque
接口实现分为通用实现和并发实现。
通用双端队列实现
通用实现包括 LinkedList
和ArrayDeque
类。Deque
接口支持两端元素的插入,删除和检索。ArrayDeque
类是Deque
接口的可调整大小的数组实现,而 LinkedList
类是列表实现。Deque
接口addFirst
,addLast
,removeFirst
,removeLast
,getFirst
和getLast
中的基本插入,删除和重新绑定操作。addFirst
方法在Deque
实例的头部添加一个元素,而addLast
方法在Deque
实例的末尾添加一个元素。LinkedList
实现比ArrayDeque
实现更灵活。LinkedList
实现所有可选的列表操作。null
元素允许在LinkedList
实现中使用,但不允许在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
可用于所有类型的列表的各种数据的向前遍历。
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
接口的并发实现。如果双端队列为空,则诸如takeFirst
和takeLast
之类的方法将等到该元素变为可用之后,再检索并删除同一元素。