You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:09:03