Хммм. У меня есть таблица, которая представляет собой массив структур, которые мне нужно хранить в Java. Наивный подход «не беспокойся о памяти» гласит: «1001 *»
public class Record {
final private int field1;
final private int field2;
final private long field3;
/* constructor & accessors here */
}
List<Record> records = new ArrayList<Record>();
Если я в конечном итоге использую большое количество (> 10 6 ) записей, к которым иногда обращаются к отдельным записям по одному, как бы я выяснил, как предшествующий подход (ArrayList) сравнил бы с оптимизированным подходом к затратам на хранение:
public class OptimizedRecordStore {
final private int[] field1;
final private int[] field2;
final private long[] field3;
Record getRecord(int i) { return new Record(field1[i],field2[i],field3[i]); }
/* constructor and other accessors & methods */
}
редактирование:
- предположим, что # записей - это то, что меняется редко или никогда
- Я, вероятно, не собираюсь использовать подход OptimizedRecordStore, но я хочу понять проблему стоимости хранилища, чтобы я мог с уверенностью принять это решение.
- очевидно, если я добавлю / изменим количество записей в подходе OptimizedRecordStore выше, мне придется либо заменить весь объект новым, либо удалить ключевое слово "final".
- kd304 поднимает хороший вопрос, который был у меня в голове. В других ситуациях, подобных этому, мне нужен доступ к столбцам записей, например, если field1 и field2 - это "time" и "position", и для меня важно получить эти значения в виде массива для использования с MATLAB, поэтому я могу эффективно их графически / анализировать.