Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
Deque
接口,发音为"deck",表示双端队列。可以将Deque
接口实现为各种类型的Collections
。将Deque
接口的实现分为通用和并发两种。
通用的实现包括LinkedList
和ArrayDeque
类。 Deque
接口支持在两端插入、删除和检索元素。 ArrayDeque
类是Deque
接口的可调整大小的数组实现,而LinkedList
类是列表实现。
Deque
接口的基本插入、删除和检索操作包括addFirst
、addLast
、removeFirst
、removeLast
、getFirst
和getLast
方法。 addFirst
方法在头部添加元素,而addLast
方法在尾部添加元素。
LinkedList
实现比ArrayDeque
实现更灵活。 LinkedList
实现了所有可选的列表操作。 LinkedList
实现允许null
元素,而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
接口的并发实现。如果双端队列为空,则takeFirst
和takeLast
等方法会等待,直到元素可用,然后检索并删除该元素。