HashSet统计不重复单词数的核心是自动去重:先用正则W+分词并转小写,再逐个add(),最后调用size()即得结果,时间复杂度接近O(n)。

HashSet 的核心特性是自动去重,利用这一点统计不重复单词数非常直接:把每个单词添加进 HashSet,最后调用 size() 方法即可得到不重复数量。
准备单词数据源
通常单词来自字符串(如一段文本),需先按空格、标点等分词。推荐用正则 \W+ 拆分,它能匹配非字母数字字符,比单纯用空格更鲁棒:
-
"hello, world! hello" → 分词为
["hello", "world", "hello"] - 注意:分词后建议转小写(
toLowerCase())避免大小写导致误判重复
用 HashSet 收集并去重
创建一个 HashSet<String>,遍历分词结果,逐个 add()。HashSet 内部基于 HashMap 实现,相同字符串的 hash 值和 equals 判断确保只存一份:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
set.add("apple")返回true(首次添加) -
set.add("apple")再次调用返回false(已存在,不重复插入) - 无需手动判断是否已存在,add() 自动处理
获取不重复单词总数
分词并添加完成后,直接调用 set.size() —— 这就是不重复单词的数量。整个过程时间复杂度接近 O(n),效率高且代码简洁:
立即学习“Java免费学习笔记(深入)”;
- 例如:"Java java JAVA python" → 小写后为
["java", "java", "java", "python"]→ HashSet 存{"java", "python"}→size()= 2 - 若需同时保留原始大小写形式做展示,可额外用
LinkedHashSet保持插入顺序
不复杂但容易忽略细节:分词逻辑要合理、大小写要统一、HashSet 本身不保证顺序——仅统计数量时这些都不是问题。

















