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