ОК, я только что реализовал POC вашего словаря. Быстро и грязно. Мои файлы содержали 868 строк каждая, но я создал 1024 копии одного и того же файла. (Это оглавление документации Spring Framework.)
Я провел тест, и это заняло 14020 мс (14 секунд!). Кстати, я запустил его из затмения, которое может немного снизить скорость.
Итак, я не знаю, где твоя проблема. Пожалуйста, попробуйте мой код на вашем компьютере, и, если он работает быстрее, попробуйте сравнить его с вашим кодом и понять, в чем причина проблемы.
В любом случае мой код не самый быстрый, который я могу написать.
Я могу создать Pattern перед циклом и использовать его вместо String.split (). String.split () вызывает Pattern.compile () каждый раз. Создание шаблона очень дорого.
Вот код:
public static void main(String[] args) throws IOException {
Map<String, Integer> words = new HashMap<String, Integer>();
long before = System.currentTimeMillis();
File dir = new File("c:/temp/files");
for (File file : dir.listFiles()) {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
String[] lineWords = line.split("\\s+");
for (String word : lineWords) {
int count = 1;
Integer currentCount = words.get(word);
if (currentCount != null) {
count = currentCount + 1;
}
words.put(word, count);
}
}
}
long after = System.currentTimeMillis();
System.out.println("run took " + (after - before) + " ms");
System.out.println(words);
}