嗯,我有一个由结构体组成的数组表格需要存储在Java中。不加考虑内存的朴素方法是这样的:
public class Record {
final private int field1;
final private int field2;
final private long field3;
/* constructor & accessors here */
}
List<Record> records = new ArrayList<Record>();
如果我最终使用大量(> 106)的记录,其中单个记录偶尔一次访问一个,那么我该如何确定前面提到的方法(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是“时间”和“位置”,并且重要的是将这些值作为数组获取以便与MATLAB一起使用,以便可以高效地进行图形化/分析。