首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【用Java语言利用多线程分治实现,快速的找出3.7亿个字中第一个不重复的字符】

【用Java语言利用多线程分治实现,快速的找出3.7亿个字中第一个不重复的字符】

作者头像
用户1750537
发布2025-08-29 09:46:07
发布2025-08-29 09:46:07
9200
代码可运行
举报
运行总次数:0
代码可运行
在这里插入图片描述
在这里插入图片描述

用Java语言利用多线程分治实现,快速的找出3.7亿个字中第一个不重复的字符:

代码语言:javascript
代码运行次数:0
运行
复制
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class FindFirstNonRepeatCharacter {
    private static final int THREAD_POOL_SIZE = 4; // 线程池大小
    private static final int CHUNK_SIZE = 1000000; // 每个线程处理的字符数

    public static void main(String[] args) throws Exception {
        String input = "大约有3.7亿个字的字符串"; // 待处理的字符串

        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
        Map<Character, Integer> characterCountMap = new HashMap<>();

        int start = 0;
        int end = CHUNK_SIZE;

        // 分割字符串,将每个子串交给一个线程处理
        while (start < input.length()) {
            if (end > input.length()) {
                end = input.length();
            }

            String chunk = input.substring(start, end);
            Callable<Map<Character, Integer>> callable = new CharacterCountTask(chunk);

            Future<Map<Character, Integer>> future = executorService.submit(callable);

            // 合并每个线程的结果到总的字符计数器中
            Map<Character, Integer> chunkCharacterCountMap = future.get();
            for (Map.Entry<Character, Integer> entry : chunkCharacterCountMap.entrySet()) {
                char character = entry.getKey();
                int count = entry.getValue();
                characterCountMap.put(character, characterCountMap.getOrDefault(character, 0) + count);
            }

            start = end;
            end += CHUNK_SIZE;
        }

        // 找到第一个不重复的字符
        char firstNonRepeatCharacter = '\0';
        for (int i = 0; i < input.length(); i++) {
            char character = input.charAt(i);
            if (characterCountMap.get(character) == 1) {
                firstNonRepeatCharacter = character;
                break;
            }
        }

        executorService.shutdown();

        System.out.println("第一个不重复的字符是:" + firstNonRepeatCharacter);
    }

    static class CharacterCountTask implements Callable<Map<Character, Integer>> {
        private final String input;

        CharacterCountTask(String input) {
            this.input = input;
        }

        @Override
        public Map<Character, Integer> call() {
            Map<Character, Integer> characterCountMap = new HashMap<>();
            for (int i = 0; i < input.length(); i++) {
                char character = input.charAt(i);
                characterCountMap.put(character, characterCountMap.getOrDefault(character, 0) + 1);
            }
            return characterCountMap;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档