嗯。。。40兆似乎足够小,你可以构建一个行,然后把它们全部打印出来。这将比执行O(n2)I / O工作快得多。Set
它将是这样的(忽略例外):
public void stripDuplicatesFromFile(String filename) {
BufferedReader reader = new BufferedReader(new FileReader(filename));
Set<String> lines = new HashSet<String>(10000); // maybe should be bigger
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
reader.close();
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
for (String unique : lines) {
writer.write(unique);
writer.newLine();
}
writer.close();
}
如果顺序很重要,则可以使用 而不是 .由于元素是通过引用存储的,因此与实际数据量相比,额外链表的开销应该微不足道。LinkedHashSet
HashSet
编辑:正如Shopning Alex所指出的,如果您不介意制作临时文件,则可以在阅读时简单地打印出行。这允许您使用简单而不是 .但我怀疑您是否会注意到像这样的I / O绑定操作的差异。HashSet
LinkedHashSet