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