Итак, я запускаю некоторый код, который выполняется более 300 000 раз. Каждый раз, когда этот код выполняется, он возвращает до 300 тыс. Значений. В настоящее время я сохраняю результаты, полученные в ArrayList
:
List<List<Object>> thisList = new ArrayList<List<Object>();
for (int i = 0; i < 300000; i++) {
thisList.add(new ArrayList<Object>());
}
for (int i = 0; i < 300000; i++) {
List<Object> result = someCode();
for (Object obj : result) {
thisList.get(obj.id).add(obj.value);
}
}
. В этом коде каждый раз, когда получается obj
, он имеет значение obj.id
, которое указывает index
в List
где obj.value
должно быть сохранено.
Каков наиболее эффективный способ хранения результатов в другом месте при продолжении поиска? Кажется, мой код перестает работать после итерации 400, скорее всего из-за проблем с памятью. Я рассмотрел использование простого текстового документа, где каждая строка представляет List<Object>
, но с помощью некоторого поиска в Google кажется, что нет никакого способа добавить к определенной строке, и все предложения указывают на перезапись всего текстового документа. Я никогда раньше не работал с базами данных, поэтому сейчас я стараюсь избегать этого.
Буду признателен, если кто-нибудь даст мне советы о том, что я могу сделать.
Редактировать: существует ли метод, который не использует базу данных, где после каждой итерации внешнего for loop
данные могут храниться? Например, если указан файл, который в данный момент содержит
List 0: obj.value1 obj.value2
List 1: obj.value1 obj.value4
...
List 300000: obj.value3 obj.value8
, а результат содержит
{obj<1, 100>, obj<0, 3>, ...}
, где каждый объект имеет форму obj<id, value>
, файл становится
List 0: obj.value1 obj.value2 obj.value3
List 1: obj.value1 obj.value4 obj.value100
...
List 300000: obj.value3 obj.value8