博主总结的思维导图,有需要的可自取
前言
- 目标:实现单词数量统计
- 过程:首先使用26个英文字母,每个字母200个,将26*200个字母打乱顺序存入26个txt文件中。
使用26个线程,每个线程统计一个txt文件的200个字母。26个线程同时操作这一个Map集合。
最终想要得到的结果为:a:200(a被统计了200次),b:200(b被统计了200次)……z:200(z被统计200次)总和26*200。 - 实践:使用HashMap进行统计
- 问题:HashMap会出现什么样的结果?
- 如何使用ConcurrentHashMap解决此问题。
1. 案例样本准备
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class WordCountCreat {
static final String ALPHA = "abcedfghijklmnopqrstuvwxyz"; //26个英文字母
public static void main(String[] args) throws IOException {
int length = ALPHA.length();//26
int count = 200;
List<String> list = new ArrayList<>(length * count);//26*200
for (int i = 0; i < length; i++) {//每个英文字母生成200个加入list
char ch = ALPHA.charAt(i);
for (int j = 0; j < count; j++) {
list.add(String.valueOf(ch));
}
}
Collections.shuffle(list);//将26*200个字母打乱顺序