0

我有一个读取 txt 文件的方法,我需要它来获取文本文件中的每个单词,然后按排序顺序迭代它们,而不是删除重复项。我设法让它工作,但想让代码更有效率。有人可以给我一个提示,我该怎么做才能让它更快?ArrayList 以外的东西?除了 Collections.sort 之外,还有其他排序方式吗?

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
  ArrayList<String> p = new ArrayList<String>();
    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        p.add(line);
        n++;                        
    }       

    Collections.sort(p);
4

1 回答 1

3

另一种选择是使用 aTreeMap将单词映射到它们的频率。

TreeMap<String, Integer> words = new TreeMap<>();

while ((line = r.readLine()) != null) {
    for (String word : line.split("\\s+")) {
        if (words.containsKey(line))
            words.put(line, words.get(line) + 1);
        else
            words.put(line, 1);  
    }                 
}

如果不知道您将要阅读的文件的详细信息并最终确定这两种变体的时间,那么即使不是不可能,也很难判断哪个选项更有效。

话虽如此,就Map内存而言,使用 a 可能会更好。无需存储也不必处理集合中同一个单词的多个副本,只存储一个并与之关联的频率更有意义。

于 2013-09-18T15:25:05.207 回答