我可以想到两种方法:
在我的具体情况下,我正在处理马蒂克斯的指示。我想分析哪个更轻量级:
选项1
new int[] {1, 2}
选项2
private final class Location {
public final int i;
public final int j;
public Location (int i, int j) {
this.i = i;
this.j = j;
}
}
看来它们在内存方面是等价的,这是正确的吗?
还有其他考虑因素更快吗?例如访问Location
对象属性或索引数组更快吗?我使用64位,java 6,这是相关的吗?
答案 0 :(得分:2)
如果目标是最小化堆分配量,则数组和对象之间的差异不太重要。如果您设计API使得每个调用都不是必须分配新对象,那么将实现更大的节省。有几种方法:
选项1的缺点是它不可行。您可能会或可能不会从EA中受益。
选项2的缺点是,如果要从多个调用中累积数据,则需要手动将数据复制到其他位置。
选项3是最好的,因为它可以让调用者控制分配的内容和时间。任何东西都可以隐藏在作为数据容器传递的类型的抽象背后。它可以例如将数据直接推送到输出流中。
最后一点,如果你的问题实际上是非常具体的,并且只返回两个int
,那么返回long
并使用帮助方法将两者分开是有意义的。