前言
最近刷题会遇到比较多用到栈和队列的题目,有必要熟悉一下相关类和方法。
队列
Java提供了Queue接口,推荐使用LinkedList作为实现。
队列常用的方法是入队、出队和查看队首元素。对于这三种操作,Queue提供了两类方法,一类是操作失败时抛出异常,另一类则是返回特殊值(null或false)。推荐使用返回特殊值的方法。
| 操作 | 抛出异常(不推荐) | 返回特殊值 |
|---|---|---|
| 入队 | add(e) | offer(e) |
| 出队 | remove() | poll() |
| 查看队首 | element() | peek() |
例子:
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
while (!queue.isEmpty()) {
System.out.println(queue.peek());
queue.poll();
}
栈
Java提供了栈Stack,Stack继承自Vector类,这两个都已经不推荐使用了。
Java推荐优先使用Deque及其实现作为栈。Deque是一个双端队列,继承自Queue。我们把Deque当作栈时,其实是只使用针对双端队列头部的操作。
栈常用的方法也是入栈、出栈和查看栈顶元素。
| 操作 | 抛出异常(不推荐) | 返回特殊值 |
|---|---|---|
| 入栈 | addFirst(e) | offerFirst(e) |
| 出栈 | removeFirst() | pollFirst() |
| 查看栈顶 | getFirst() | peekFirst() |
针对队尾的方法是类似的xxxLast方法,这里不列出。
例子:
Deque<Integer> stack = new ArrayDeque();
stack.offerFirst(1);
stack.offerFirst(2);
while (!stack.isEmpty()) {
System.out.println(stack.peekFirst());
stack.pollFirst();
}