Deque Implementations
Deque
interface,发音为*“ deck” *,表示 deque。 Deque
interface可以实现为各种类型的Collections
。 Deque
interface实现分为通用实现和并发实现。
通用 deque 实现
通用实现包括LinkedList
和ArrayDeque
类。 Deque
interface支持两端元素的插入,删除和检索。 ArrayDeque类是Deque
interface的可调整大小的数组实现,而LinkedList类是列表实现。
Deque
interfaceaddFirst
,addLast
,removeFirst
,removeLast
,getFirst
和getLast
的基本插入,删除和检索操作。 addFirst
方法在Deque
实例的末尾添加元素,而addLast
添加在Deque
实例的末尾元素。
LinkedList
实现比ArrayDeque
实现更灵活。 LinkedList
实现所有可选的列表操作。 LinkedList
实现中允许null
元素,但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
Iterator
可用于对各种数据的各种列表进行正向遍历。
ArrayDeque<String> aDeque = new ArrayDeque<String>();
. . .
for (Iterator<String> iter = aDeque.iterator(); iter.hasNext(); ) {
System.out.println(iter.next());
}
本教程中使用ArrayDeque
类来实现Deque
interface。 ArrayDequeSample中提供了本教程中使用的示例的完整代码。 LinkedList
和ArrayDeque
类都不支持多个线程的并发访问。
并发 deque 实现
LinkedBlockingDeque类是Deque
interface的并发实现。如果 deque 为空,则诸如takeFirst
和takeLast
之类的方法将等到该元素变为可用为止,然后检索并删除同一元素。