嗯… 40兆似乎足够小,您可以建立一个
Set线条,然后全部打印出来。这将比O(n 2)I / O工作更快。
就像这样(忽略异常):
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。由于元素是通过引用存储的,因此与实际数据量相比,额外链表的开销应该微不足道。
编辑: 正如Workshop
Alex指出的那样,如果您不介意制作临时文件,则只需在阅读时打印出来即可。这使您可以使用
HashSet而不是
linkedHashSet。但是我怀疑您会注意到这样的I
/ O绑定 *** 作的区别。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)