ArrayDeque是Java中高效实现双端队列的类,支持FIFO和LIFO操作,默认容量16,不支持null元素;1. 使用addFirst/addLast或offerFirst/offerLast在两端添加元素;2. 用removeFirst/removeLast或pollFirst/pollLast移除元素,后者在为空时返回null;3. getFirst/getLast和peekFirst/peekLast用于查看首尾元素,前者抛异常后者返回null;4. 当作队列时用offerLast入队、pollFirst出队,当作栈时用push入栈、pop出栈,性能优于Stack类;5. 可通过增强for循环或迭代器遍历,调用clear()清空元素。

在Java中,ArrayDeque 是一个基于可变大小数组的双端队列(Double-ended Queue)实现。它支持在队列的两端高效地插入和删除元素,既可以当作队列(FIFO),也可以当作栈(LIFO)使用。ArrayDeque 是 java.util 包中的类,实现了 Deque 接口。
创建 ArrayDeque 实例
要使用 ArrayDeque,首先需要创建一个实例。可以通过无参构造函数创建,默认初始容量为16,也可以指定初始容量。
- ArrayDeque
deque = new ArrayDeque(); - ArrayDeque
deque = new ArrayDeque(32); // 初始容量32
常用操作方法
ArrayDeque 提供了丰富的在头部和尾部进行操作的方法,下面按功能分类说明:
1. 添加元素
立即学习“Java免费学习笔记(深入)”;
- addFirst(e) / offerFirst(e):在队列头部添加元素
- addLast(e) / offerLast(e):在队列尾部添加元素(等同于普通队列的入队)
2. 删除元素
- removeFirst() / pollFirst():移除并返回头部元素
- removeLast() / pollLast():移除并返回尾部元素
3. 查看元素(不删除)
- getFirst() / peekFirst():获取头部元素
- getLast() / peekLast():获取尾部元素
注意:带 peek 和 poll 的方法在队列为空时返回 null;而 get 和 remove 方法会抛出异常。
作为队列或栈使用
ArrayDeque 灵活性高,可以模拟不同数据结构的行为:
当作普通队列(FIFO)使用:
- 入队:offerLast(e)
- 出队:pollFirst()
- 查看队首:peekFirst()
当作栈(LIFO)使用:
- 入栈:push(e) 或 addFirst(e)
- 出栈:pop() 或 removeFirst()
- 查看栈顶:peek()
ArrayDeque 被推荐作为栈使用,性能优于 Stack 类。
遍历与清空
可以使用增强for循环或迭代器遍历 ArrayDeque:
- for (String s : deque) { System.out.println(s); }
清空所有元素使用 clear() 方法:
- deque.clear();
基本上就这些。ArrayDeque 使用简单、效率高,是实现双端队列的首选方案。注意它不支持 null 元素,插入 null 会抛出 NullPointerException。根据实际需求选择合适的方法组合即可。










