如何在Java中使用HashMaps去除两个独立文本文件中的相同词汇
你不需要用HashMap来存储连接词,直接用HashSet<String>就可以,这个数据结构只存不重复的元素,刚好匹配你「判断某个token是否是连接词」的需求,查询效率平均为O(1),非常适合这个场景。
1. 读取连接词文件生成过滤集合
假设你的连接词文件每行存放一个连接词,实现代码如下:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.List; import java.util.ArrayList; public class ConjunctionFilter { public static void main(String[] args) { Set<String> conjunctionSet = new HashSet<>(); // 读取连接词文件 try (BufferedReader br = new BufferedReader(new FileReader("conjunction.txt"))) { String line; while ((line = br.readLine()) != null) { String word = line.trim(); // 跳过空白行 if (word.isEmpty()) continue; // 如果是英文文本统一转小写,避免大小写不匹配的问题,中文可以删掉toLowerCase() conjunctionSet.add(word.toLowerCase()); } } catch (IOException e) { e.printStackTrace(); } } }
2. 过滤处理后的token
你已经拆分好的原始token列表,直接遍历判断是否在连接词集合中即可:
// yourOriginalTokens是你之前拆分、去标点后得到的原始token列表 List<String> validTokens = new ArrayList<>(); for (String token : yourOriginalTokens) { // 匹配规则和存储集合时保持一致,英文转小写,中文直接传原值 if (!conjunctionSet.contains(token.toLowerCase())) { validTokens.add(token); } } // 后续你原有的频次统计、排序逻辑直接使用validTokens即可
方案优势
- 内存占用低:和
HashMap相比不需要存储无用的value值,仅存储需要判断的连接词本身 - 查询效率高:
HashSet的包含判断平均时间复杂度为O(1),哪怕连接词有上万个,单次判断也几乎没有性能损耗 - 实现简单:代码逻辑清晰,非常适合初学者快速上手
内容的提问来源于stack exchange,提问作者I_Respect_Women
相关产品推荐
相关产品推荐

