テキストファイルに50,000,000(整数、文字列)のペアがあります。整数はミリ秒単位の時間であるため、13桁の長さです(例:1337698339089)。
テキストファイルのエントリは次のようになります。
1337698339089|blaasdasd
1337698339089|asdasdas
1337698338089|kasda
同一のエントリが存在する可能性があります。
重複する整数を保持し、(整数、文字列)ペアを保持して、整数のエントリを(昇順で)並べ替えたいと思います。私が採用したアプローチはメモリエラーにつながるため、別のアプローチを探しています。
私のアプローチは次のようなものです(いくつかの擬似コードを使用):
// 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の間で2倍にインクリメントすることにより)。
// to print the sorted entries:
for (Double d : sorted.KeySet()) {
System.out.println(Math.round(d) + "|" + sorted.get(d));
}
このアプローチは機能しますが、50,000,000エントリに分類されます(ツリーマップが大きくなりすぎているため、またはwhileループの実行時間が長すぎるためと思われます)。
より経験豊富なプログラマーがどのようなアプローチを取るのか知りたいです。
どうもありがとう!