Java中LinkedList实现Deque接口,支持O(1)栈操作:push()等价addFirst()、pop()等价removeFirst(),均操作链表头部;推荐优先使用ArrayDeque替代Stack类。

Java 中的 LinkedList 实现了 Deque 接口,因此天然支持栈(LIFO)操作,比如 push() 和 pop()。这些方法默认在队列**头部**(即链表首端)进行插入和删除,符合栈“后进先出”的语义。
push() 和 pop() 的实际行为
push(E e) 等价于 addFirst(e),把元素添加到链表开头;pop() 等价于 removeFirst(),移除并返回开头元素。两者都操作链表头部,时间复杂度为 O(1)。
- 调用
push("A")→ 列表变为[A] - 再调用
push("B")→ 变为[B, A] - 调用
pop()→ 返回"B",列表剩[A]
注意:不要混用栈和队列操作
LinkedList 同时支持双端操作,但栈语义只依赖头端。如果穿插使用 addLast() 或 removeLast(),会破坏 LIFO 顺序。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- ✅ 正确:只用
push()/pop()或只用addFirst()/removeFirst() - ❌ 危险:
push("X"); addLast("Y"); pop()→ 返回 "X",但 "Y" 还在尾部,逻辑混乱
peek() 查看栈顶不弹出
peek() 对应 peekFirst(),安全查看头部元素而不修改结构。若链表为空,返回 null(不是异常),适合判空场景。
立即学习“Java免费学习笔记(深入)”;
Deque<string> stack = new LinkedList();</string>stack.push("hello");System.out.println(stack.peek()); // 输出 "hello"System.out.println(stack.pop()); // 输出 "hello",stack 变空
替代方案:更明确的 Stack 类?
虽然 Stack 类也提供 push()/pop(),但它继承自过时的 Vector,线程同步且性能差。官方推荐用 Deque 实现(如 LinkedList 或 ArrayDeque)——后者在多数场景下比 LinkedList 更快、内存更省。
- 优先考虑:
Deque<integer> stack = new ArrayDeque();</integer> - 除非需要频繁在中间插入/删除,否则
ArrayDeque是更优的栈实现

















