java中用长度26数组实现trie支持英文小写前缀补全:每个节点含children[26]和isend,通过ch-'a'索引;插入时建路径并设末节点isend=true;补全时先匹配前缀,再dfs收集所有isend为true的完整单词。

在 Java 中用数组实现字典树(Trie)做前缀自动补全,核心是用固定大小的子节点数组(如 children[26])代替 HashMap,适合英文小写字母场景;补全逻辑就是从根出发走到前缀末尾,再 DFS 收集所有以该前缀开头的完整单词。
数组 Trie 的结构设计
每个 TrieNode 用一个长度为 26 的 Node 数组表示 a–z 子节点,外加一个布尔字段 isEnd 标记是否为单词结尾:
- 数组索引直接映射字符:比如 ch - 'a' 得到 0~25 的下标
- 不存字符本身,靠位置隐含语义,节省空间且访问快
- 无需额外哈希计算,无扩容开销,适合静态或中等规模词典
插入单词(build Trie)
逐个字符遍历单词,对每个字符计算下标,若对应 children 位置为空则新建节点,最后在末尾节点设 isEnd = true:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 例如插入 "cat":c→a→t 路径上依次创建节点,t 节点 isEnd = true
- 插入 "car" 会复用 c→a 路径,再分出 r 分支,a 节点不设 isEnd,r 节点设为 true
- 注意边界:空字符串可单独处理(isEnd 在 root 设为 true),但一般不建议作为有效词
前缀匹配与 DFS 补全
先走完前缀路径(中途遇到 null 则无匹配),到达终点节点后,从此节点开始深度优先遍历所有 isEnd 为 true 的叶子,拼接路径得到候选词:
- 用 StringBuilder 累积路径字符,进入子节点前 append,回溯时 deleteCharAt(size-1)
- 每到一个 isEnd == true 的节点,就把当前 StringBuilder.toString() 加入结果列表
- 限制返回数量(如最多 5 个)可提前剪枝,提升响应速度
搜索框集成示例(简化版)
假设有一个输入框监听 keyReleased 事件,每次获取当前文本作为 prefix,调用 trie.autoComplete(prefix):
- 输入 "ca" → 返回 ["cat", "car", "can"](按插入顺序或字典序可后续排序)
- 实时调用需防频繁触发,可用简单防抖:延迟 200ms 执行,中间新输入则取消前一次
- 若支持大小写混合,可统一转小写插入和查询;若含空格或符号,需扩展数组大小(如 128)并重定义索引规则
数组 Trie 实现轻量、高效,适合嵌入式或对延迟敏感的前端补全场景;缺点是内存固定占用(26×节点数),且扩展性不如 Map 版本。实际项目中可先用数组版验证逻辑,再按需升级。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










