2023-03-10 Java中使用ArrayDeque实现栈和队列
栈和队列的实现实际上完全可以用JDK自带的类
ArrayDeque来实现
作为队列使用
public abstract boolean add(E paramE); // 加入元素到队尾public abstract boolean offer(E paramE); // 加入元素到队尾public abstract E remove(); // 弹出队头元素public abstract E poll(); // 弹出队头元素
ArrayDeque接口提供了以上几个方法,使用时要注意:
- 尽量避免使用
add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。 offer()和poll()优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。- 如果要使用队头元素而不移出该元素,使用
element()或者peek()方法
代码示例:
import java.util.ArrayDeque;
/**
* ArrayDeque作为队列使用
*/
public class ArrayDequeQueue {
public static void main(String[] args) {
// 左边的ArrayDeque可以换成java.util.Queue,相当于向上转型,会只留下add()和remove()方法。见图论中BFS的实现
ArrayDeque<String> queue = new ArrayDeque<>();
// 入队
queue.offer("Java");
queue.offer("Python");
queue.offer("C++");
System.out.println(queue);
// 出队
System.out.println(queue.poll());
System.out.println(queue);
// 打印队首元素,但是并不出队
System.out.println(queue.peek());
System.out.println(queue);
}
}
作为栈使用
- 添加元素:
push() - 弹出元素:
pop() - 获取栈顶元素但不弹出:
peek()
import java.util.ArrayDeque;
/**
* ArrayDeque当成栈来使用
*/
public class ArrayDequeStack {
public static void main(String[] args) {
ArrayDeque<String> stack = new ArrayDeque<>();
// 入栈
stack.push("Java");
stack.push("Python");
stack.push("C++");
System.out.println(stack);
// 出栈
System.out.println(stack.pop());
System.out.println(stack);
// 显示第一个元素但是不出栈
System.out.println(stack.peek());
System.out.println(stack);
}
}
栈的JDK标准类还有java.util.Stack,使用方法完全一样

浙公网安备 33010602011771号