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之类的方法将等到该元素变为可用之后,再检索并删除同一元素。
