在Java中,LinkedList是一个基于双向链表实现的集合类,它同时实现了List接口和Deque接口。因为Deque支持在两端进行插入和删除,所以LinkedList既可以直接当队列使用,也能很方便地当成栈来用。掌握它的常用方法,可以让我们在不引入额外类的情况下完成基础数据结构操作。

用LinkedList实现队列
队列遵循先进先出原则,元素从尾部进入、头部取出。LinkedList提供了多组方法来实现这一行为,其中最推荐的是Deque中定义的offer、poll和peek,它们在容量受限时不会抛异常,而是返回特殊值。
常用队列方法对照
| 操作 | 抛出异常版 | 返回值版 |
|---|---|---|
| 入队 | addLast(e) | offer(e) / offerLast(e) |
| 出队 | removeFirst() | poll() / pollFirst() |
| 查看头 | getFirst() | peek() / peekFirst() |
下面是用LinkedList作为队列的一个简单示例:
import java.util.LinkedList;
import java.util.Queue;
public class QueueDemo {
public static void main(String[] args) {
// 使用LinkedList作为Queue的实现
Queue<String> queue = new LinkedList<>();
queue.offer("A"); // 入队
queue.offer("B");
queue.offer("C");
// 查看队头但不移除
System.out.println(queue.peek()); // 输出 A
// 依次出队
while (!queue.isEmpty()) {
System.out.println(queue.poll()); // 依次输出 A B C
}
}
}
用LinkedList实现栈
栈遵循后进先出原则,最后压入的元素最先弹出。LinkedList的push方法相当于addFirst,pop方法相当于removeFirst,因此可以很自然地模拟栈。
栈的常用方法
- push(e):将元素压入栈顶,即头部插入
- pop():弹出栈顶元素,即移除并返回头部元素
- peek():查看栈顶元素但不移除
示例代码如下:
import java.util.LinkedList;
public class StackDemo {
public static void main(String[] args) {
LinkedList<String> stack = new LinkedList<>();
stack.push("一"); // 压栈
stack.push("二");
stack.push("三");
// 查看栈顶
System.out.println(stack.peek()); // 输出 三
// 弹栈
while (!stack.isEmpty()) {
System.out.println(stack.pop()); // 依次输出 三 二 一
}
}
}
LinkedList其他常用方法解析
除了上述队列和栈相关方法,LinkedList还有一些频繁使用的方法:
元素访问与删除
- addFirst(e)与addLast(e):在头尾插入元素
- removeFirst()与removeLast():删除头尾元素,为空时抛异常
- get(int index):按索引随机访问,但效率较低,需要遍历链表
注意:虽然LinkedList支持get(index),但由于链表不支持随机寻址,频繁按索引访问时应优先考虑ArrayList。
与List接口相关
作为List的实现,LinkedList同样可以使用add(e)、remove(Object)、contains(e)等方法,但这些操作和ArrayList在性能特征上不同,插入删除更优,随机访问更弱。
总结
通过LinkedList实现队列和栈,核心是利用它在首尾高效插入删除的特性。队列推荐使用offer、poll、peek,栈推荐使用push、pop、peek。理解这些方法背后的等价操作,如push等价于addFirst,有助于我们在不同场景写出清晰且健壮的代码。
JavaLinkedList队列和栈修改时间:2026-07-30 00:06:23