У меня есть 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);
Я использую случайные числа здесь, чтобы гарантировать, что дублирующие целые числа могут быть введены в treemap (путем увеличения их на double от 0 до 1).
// to print the sorted entries:
for (Double d : sorted.KeySet()) {
System.out.println(Math.round(d) + "|" + sorted.get(d));
}
Этот подход работает, но разбивается на 50 000 000 записей (я думаю, потому что treemap становится слишком большим или, возможно, потому, что цикл while работает слишком долго).
Я хотел бы знать, какой подход потребуют более опытные программисты.
Большое спасибо!