如何使我的排序列表更有效?

时间:2013-09-18 15:21:30

标签: java arrays list

我有一个读取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);

1 个答案:

答案 0 :(得分:3)

另一个选择是使用TreeMap将单词映射到他们的频率。

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可能更为可取。没有必要存储并且必须处理集合中相同字的多个副本,更有意义的是只存储一个并且具有相关频率。

相关问题