【发布时间】:2017-02-01 13:03:25
【问题描述】:
嗯。我有一个表,它是我需要存储在 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 对我来说很重要,这样我就可以有效地绘制/分析它们。
【问题讨论】:
-
这究竟是如何优化的?你的意思是成员对齐?
-
每个 Record 对象都会产生每个对象的存储成本(4 个字节?8 个字节?我不知道)和创建每个对象的性能成本。如果我有1000个,我不在乎。如果我有 100,000 或 1,000,000 个,我就会开始关心。
标签: java data-structures