Java中栈和队列

320 阅读1分钟

前言

最近刷题会遇到比较多用到栈和队列的题目,有必要熟悉一下相关类和方法。

队列

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();
}