我有一个设计选择:我是否创建了一个包含对象的数组,每个包含一些不同的值,或者我创建一个包含几个不同值的数组的对象?
选项1:
Node[][] nodes;
class Node{
double val1;
double val2;
}
选项2:
Node[] nodes;
class Node{
double[] val1;
double[] val2;
}
我的直觉说选项2效率更高只是因为对象更少而且开销更少,但是double []的价格会一样高吗?
答案 0 :(得分:7)
你知道这里会有重大问题吗?你要创造多少这些?
您不应该过多担心性能开始 - 问问自己单个节点逻辑是否有多对值或只有一对。让你的课程遵循你的建模 - 关注性能和内存使用情况,但不要让它将你的设计排除在自然模型之外。
答案 1 :(得分:1)
如果您的阵列为10 * 20,则表示第一种情况下为10 * 20 * 2,第二种情况下为10 *(20 + 20)。在这两种情况下,都会产生400.所以内存方面没有区别。
如果您的数组只包含几个节点,您可以考虑一个HashMap,其中K是包含给定节点的数组坐标的不可变类,V是包含该节点的val1和val2的对象。您只需为每个节点分配内存,而不是整个阵列。
答案 2 :(得分:1)
记忆模型 - >
Array = value1,value2,value3 ...
Object = Field1,Field2,Field3 ......
如果您有对象数组,则内存如下:Field1, Field2, Field3, Field1, Field2, Field3...
如果您有一个包含数组的对象,则内存看起来像Field1, Field1, Field1.... Field2, Field2, Field2...
访问连续内存比访问非连续内存要快。