由于 Deque 是一个双端队列,它既可以作为队列使用(遵循 FIFO 先进先出原则),也可以作为栈使用(遵循 LIFO 后进先出原则)
Deque 接口提供了栈的所有操作,并且其实现类(如ArrayDeque)通常比 Stack 类具有更好的性能(Stack 类中的一些方法已经过时)。
Deque<String> stack = new ArrayDeque<>();
// 压栈操作
stack.push("元素1");
stack.push("元素2");
stack.push("元素3");
// 查看栈顶元素
System.out.println("栈顶元素: " + stack.peek());
// 弹栈操作
String topElement = stack.pop();
System.out.println("弹栈元素: " + topElement);
// 判断栈是否为空
System.out.println("栈是否为空: " + stack.isEmpty());
Deque 还可以作为队列使用,相关的方法有(假设 Deque 对象为 deque):
-
deque.offerFirst(E e):将指定元素插入到队列开头。若队列已满,返回 false。
-
deque.offerLast(E e):将指定元素插入到队列末尾。若队列已满,返回 false。
-
deque.pollFirst():移除并返回双端队列的第一个元素,若队列为空,返回 null。
-
deque.pollLast():移除并返回队列的最后一个元素,若队列为空,返回 null。
-
deque.peekFirst():返回队列的第一个元素,若队列为空,返回 null。
-
deque.peekLast():返回此队列的最后一个元素,若队列为空,返回 null。
-
deque.clear():清空双端队列。
-
deque.contains(Object o):如果队列包含指定元素,返回 true。
-
deque.size():返回队列的长度
deque 的 add、push、offerFirst、offerLast 方法有什么不同?
- add 方法:在队尾添加元素。若成功返回 true;若队列已满且无法添加更多元素则抛出 IllegalStateException。
- push 方法:将元素添加到队头。push 方法不返回任何值,但如果队列已满且无法添加元素,它将抛出IllegalStateException。在语义上,push方法更适用于实现栈的行为。
- offerFirst 方法:将元素添加到队头。若成功返回 true;若队列已满且无法添加元素,返回 false。
- offerLast 方法:将元素添加到队尾。成功返回 true;如果队列已满且无法添加元素返回 false。