我有一些文件应该根据每行开头的id进行排序。文件大小约为2-3 gb。
我尝试将所有数据读取到一个ArrayList中并对它们进行排序。但是内存并不足以保存所有这些数据。它不起作用。
线条看起来像这样
0052304 0000004000000000000000000000000000000041 John Teddy 000023
0022024 0000004000000000000000000000000000000041 George Clan 00013
如何对文件进行排序??
发布于 2011-10-27 23:15:13
这完全不是Java的问题。您需要研究一种有效的算法来对未完全读取到内存中的数据进行排序。对Merge-Sort进行一些调整就可以实现这一点。
看看这个:http://en.wikipedia.org/wiki/Merge_sort
和:http://en.wikipedia.org/wiki/External_sorting
基本上,这里的想法是将文件拆分成较小的片段,对它们进行排序(使用merge sort或其他方法),然后使用Merge from merge-sort创建新的排序文件。
发布于 2016-08-18 01:53:44
由于您的记录已经是平面文件文本格式,您可以将它们通过管道传输到UNIX sort(1),例如sort -n -t' ' -k1,1 < input > output。它将自动将数据分块,并使用可用内存和/tmp执行合并排序。如果需要的空间超过了可用内存,请在命令中添加-T /tmpdir。
有趣的是,每个人都告诉您下载大型C#或Java库,或者自己实现merge-sort,因为您可以使用在每个平台上都可用并且已经存在了几十年的工具。
发布于 2011-10-27 23:15:13
你需要一个外部的合并排序来做到这一点。Here是它的一个Java实现,可以对非常大的文件进行排序。
https://stackoverflow.com/questions/7918060
复制相似问题