繁体   English   中英

用Java计算100K单词的频率应花费多少时间

[英]How much time should take to count the frequency of 100K words in Java

我必须阅读大约10万个单词的文本文件,并使用每个单词的频率创建一个HashMap。 到目前为止,我执行的代码大约需要15到20分钟才能执行,我猜我在做一些可怕的错误。 这样的任务的执行时间是多少?

这是我正在使用的代码

    Scanner scanner = new Scanner(new FileReader("myFile.txt"));
    HashMap<String, Integer> wordFrequencies = new HashMap<>();
    while (scanner.hasNextLine()) {
        wordFrequencies.merge(scanner.next(), 1, (a, b) -> a + b);
    }
    return wordFrequencies;

这应该是无时间的。 例如,如果只执行一次,则几乎不会注意到它所花费的时间。 如果要花费20分钟,那么您每秒将处理大约100个单词,即使您的单词确实很长,这也是令人讨厌的性能。

BufferedReader的Javadoc中(添加了重点):

通常,由读取器发出的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。 因此,建议将BufferedReader包装在其read()操作可能会很昂贵的任何Reader 周围 ,例如FileReaders和InputStreamReaders。

尝试将FileReader包装在BufferedReader

Scanner scanner = new Scanner(new BufferedReader(new FileReader("myFile.txt")));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM