牛客网新手入门130_81-84题_20260113

4 阅读3分钟

【Java 入门】栈的核心应用与基础语法全梳理

一、核心知识点总览

今天围绕「栈(Stack)」这个核心数据结构,系统学习了其基础用法、实际应用场景,以及配套的 Java 基础语法,重点覆盖:

  1. 栈的核心特性与常用 API
  1. 字符串处理(分割、类型转换、字符提取)
  1. 合法括号序列判断(栈的经典实战)
  1. Java 输入输出与基础语法细节

二、栈(Stack)核心知识点

1. 栈的本质特性

  • 后进先出(LIFO) :最后入栈的元素最先出栈
  • 栈顶:最后入栈的元素所在位置(操作的唯一出入口)
    • 示例:依次 push (1)、push (2)、push (3) → 栈为[1,2,3],3 是栈顶;pop () 后弹出 3,2 成为新栈顶

2. Java Stack 类核心 API(均为 JDK 自带)

方法功能注意事项
push(x)将元素 x 入栈(压入栈顶)无返回值,仅完成入栈操作
pop()弹出栈顶元素(删除并返回)栈空时调用会抛出 EmptyStackException
peek()获取栈顶元素(不删除)栈空时调用会抛出 EmptyStackException
isEmpty()判断栈是否为空,返回 boolean优先用于空栈判断,避免异常
size()返回栈中元素数量等价于isEmpty() == (size() == 0)

三、字符串处理基础

1. 字符串分割与提取

  • String.split("分隔符"):按指定分隔符拆分字符串为数组
    • 示例:"push 100".split(" ") → ["push", "100"]
  • String.charAt(i):获取字符串第 i 个字符(下标从 0 开始)
  • 非括号字符过滤:遍历字符串,仅保留()/[],忽略其他字符

2. 类型转换

场景方法示例
字符串转整数Integer.parseInt(字符串)Integer.parseInt("100") → 100
整数转字符串String.valueOf(数字)String.valueOf(100) → "100"
超大数字转换Long.parseLong(字符串)处理超出 int 范围的数字

四、经典实战:合法括号序列判断

1. 核心逻辑(栈的典型应用)

// 1. 提取所有括号字符(忽略其他字符)
// 2. 遍历括号序列:
//    - 左括号((、[)→ 入栈
//    - 右括号()、])→ 检查栈是否为空 + 栈顶是否匹配
// 3. 遍历结束后,栈必须为空(无剩余左括号)

2. 关键判定规则

  • 右括号必须匹配「最近的」左括号()配(,]配[)
  • 栈空时遇到右括号 → 直接不合法
  • 遍历结束栈非空 → 有未匹配的左括号 → 不合法

五、Java 基础语法细节

1. 输入处理

  • Scanner.nextLine():读取整行输入(含空格),需注意nextInt()后残留换行符的处理
  • Scanner.close():关闭输入流,释放资源

2. 高效字符拼接

  • StringBuilder:循环拼接字符时优先使用,避免 String 不可变导致的性能损耗

3. 分支 / 循环

  • switch:多分支场景替代if-else,代码更简洁
  • 循环终止:break可直接退出循环,减少无效遍历

六、新手避坑指南

  1. 空栈操作:执行pop()/peek()前必须用isEmpty()判断
  1. 类型转换:Integer.parseInt()仅支持纯数字字符串,含非数字字符会抛异常
  1. 数组下标:Java 数组下标从 0 开始,parts[1]是分割后的第二个元素
  1. 括号匹配:严格区分()和[],不能交叉匹配(如[(])不合法)

总结

今天的核心是「栈的后进先出特性」+「字符串处理」+「合法括号判断逻辑」,栈作为基础数据结构,是解决括号匹配、表达式求值等问题的核心工具;同时掌握 Java 字符串操作、类型转换等基础语法,能有效提升代码的健壮性和可读性。