LinkedList可实现队列和栈:1. 用offer入队、poll出队实现FIFO;2. 用push入栈、pop出栈实现LIFO;其双端操作高效,适合模拟这两种结构。

在Java中,LinkedList 是一个双向链表实现的集合类,它不仅实现了 List 接口,还实现了 Deque(双端队列)接口。正因为如此,LinkedList 可以非常方便地用来模拟 队列(Queue) 和 栈(Stack) 的行为。下面详细介绍如何使用 LinkedList 实现这两种数据结构。
使用LinkedList实现队列
队列是一种“先进先出”(FIFO)的数据结构。元素从队尾入队,从队头出队。LinkedList 提供了对应的方法来支持这种操作。
常用方法:
-
offer(element):将元素添加到队尾(推荐用于队列) -
poll():移除并返回队头元素,如果队列为空则返回 null -
peek():查看队头元素但不移除,为空时返回 null
示例代码:
立即学习“Java免费学习笔记(深入)”;
LinkedListqueue = new LinkedList<>(); queue.offer("A"); queue.offer("B"); queue.offer("C"); System.out.println(queue.peek()); // 输出 A System.out.println(queue.poll()); // 输出 A System.out.println(queue.poll()); // 输出 B
这段代码模拟了一个标准的队列操作流程:先进先出。
使用LinkedList实现栈
栈是一种“后进先出”(LIFO)的数据结构。元素从栈顶压入,也从栈顶弹出。虽然 Java 中有 Stack 类,但官方更推荐使用 LinkedList 来实现栈,因为其性能更好且功能更灵活。
常用方法:
-
push(element):将元素压入栈顶 -
pop():弹出并返回栈顶元素,如果栈为空则抛出异常 -
peek():查看栈顶元素但不移除
示例代码:
立即学习“Java免费学习笔记(深入)”;
LinkedListstack = new LinkedList<>(); stack.push(1); stack.push(2); stack.push(3); System.out.println(stack.peek()); // 输出 3 System.out.println(stack.pop()); // 输出 3 System.out.println(stack.pop()); // 输出 2
这个例子展示了典型的栈操作:后进先出。
注意事项与建议
尽管 LinkedList 功能强大,但在使用时仍需注意以下几点:
- 对于频繁随机访问的场景,LinkedList 性能不如 ArrayList,因为它是链表结构,访问需要遍历
- 作为栈使用时,
push和pop操作默认作用于链表头部,效率为 O(1) - 作为队列使用时,
offer添加到尾部,poll从头部取出,也是高效操作 - 若多线程环境下使用,需自行同步或考虑使用并发容器
基本上就这些。LinkedList 凭借其双端操作能力,是实现队列和栈的理想选择,既简洁又高效。










