java - 如何使我的排序列表更加高效?

标签 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);

最佳答案

另一个选择是使用 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 可能会更好。无需存储和处理集合中相同单词的多个副本,只存储一个并具有关联的频率更有意义。

关于java - 如何使我的排序列表更加高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876243/

相关文章:

java - 同步方法会抛出EOF异常吗?

java - 使用 JavaFX 和 maven 将模块描述符添加到库中

python - 与一维高斯卷积

c - 如何将数组传递给 C 中的方法并编辑内容?

C# 如何从父列表访问继承的对象

python - 将列表显示为字符串

java - 将通过 JDBC 检索的 java.sql.Date 值转换为 java.time.LocalDate?

java - 如果我位于不同的网络/域中,是否可以使用计算机名称而不是 IP?

JavaScript。如何通过数组函数更改对象中的某些数据?

r - 嵌套列表到数据框