带数组的对象或对象数组?

时间:2011-08-11 19:25:30

标签: java arrays performance

我有一个设计选择:我是否创建了一个包含对象的数组,每个包含一些不同的值,或者我创建一个包含几个不同值的数组的对象?

选项1:

Node[][] nodes;
class Node{
   double val1;
   double val2;
}

选项2:

Node[] nodes;
class Node{
    double[] val1;
    double[] val2;
}

我的直觉说选项2效率更高只是因为对象更少而且开销更少,但是double []的价格会一样高吗?

3 个答案:

答案 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...

访问连续内存比访问非连续内存要快。