我在一个文本文件中有 50,000,000 个(整数,字符串)对。整数是以毫秒为单位的时间,因此是 13 位长(例如 1337698339089)。
文本文件中的条目如下所示:
1337698339089|blaasdasd
1337698339089|asdasdas
1337698338089|kasda
可以有相同的条目。
我想对整数上的条目进行排序(按升序),保留任何重复的整数并保留 (integer, string) 对。我采取的方法会导致内存错误,因此我正在寻找替代方法。
我的方法是这样的(使用一些伪代码):
// declare TreeMap to do the sorting
TreeMap<Double, String> sorted = new TreeMap<Double, String>();
// loop through entries in text file, and put each in the treemap:
for each entry (integer, string) in the text file:
Random rand = new Random();
double inc = 0.0;
while (sorted.get(integer + inc) != null) {
inc = rand.nextDouble();
}
sorted.put(integer + inc, string);
我在这里使用随机数来确保可以在树形图中输入重复的整数(通过将它们增加 0 和 1 之间的两倍)。
// to print the sorted entries:
for (Double d : sorted.KeySet()) {
System.out.println(Math.round(d) + "|" + sorted.get(d));
}
这种方法有效,但会分解 50,000,000 个条目(我认为是因为树形图变得太大;或者可能是因为 while 循环运行时间过长)。
我想知道更有经验的程序员会采取什么方法。
非常感谢!