最好使用一个3D阵列或两个2d?

时间:2014-04-10 13:51:38

标签: java performance multidimensional-array

如果我想在2d数组中存储两个值,使用一个3d数组存储值是否更好(内存和速度)?还是两个2d阵列?例如:

int[][][] array = new int[rows][cols][data];

for(int i = 0; i < rows; i++)
    for(int j = 0; j < cols; j++)
    {
        array[i][j][0] = value1;
        array[i][j][1] = value2;
    }

int[][] array1 = new int[rows][cols];
int[][] array2 = new int[rows][cols];

for(int i = 0; i < rows; i++)
    for(int j = 0; j < cols; j++)
    {
        array1[i][j] = value1;
        array2[i][j] = value2;
    }

或者在性能方面真的不重要吗?

它们不是我正在使用的大规模阵列,最可能只有一百到一百......但如果要扩大规模,最好使用它?

或者,如果性能根本不受影响,这将被认为是最好的编码实践?

编辑:这与java项目有关,但更多只是对一般情况感兴趣;如果有不同的语言会根据使用的方法产生影响,那么这些信息对于将来的参考也是有用的。

3 个答案:

答案 0 :(得分:0)

我认为它会更容易,并且可以更好地扩展,您可以定义一个类来保存您的值,然后将它们存储在它们的Vector或ArrayList中。

例如

class Values {
    int value1;
    int value2;
}

ArrayList<Values> valueList = new ArrayList<Values>()

for (int i = 0, i <= 100, i++) {
    currentValue = Values();
    currentValue.value1 = i + 1;
    currentValue.value2 = i + 2;
    valueList[i] = currentValue;
}

在性能方面,根据您遍历2d或3d阵列的方式,您可以获得线性或二次阶性能。

答案 1 :(得分:0)

不知道你真正想要实现的目标,我想说你需要的是在矩阵中放置一个带有相关数据的对象(前提是这是对你的问题区域的最佳描述)。这意味着。

class MeasurePoint {
  int temperature;  // For example
  int windSpeed;

  MeasurePoint(int a, int b) {
    temperature = a;
    windSpeed = b;
  }
}

MeasurePoint[][] map = new MeasurePoint[rows][cols];

for(int i = 0; i < rows; i++) {
    for(int j = 0; j < cols; j++) {
      map[i][j] = new MeasurePoint(value1, value2);
    }
}

Java是面向对象的。利用您可以使用的建模工具。如果你只是想要遍历内存,你就可以随身携带了。

答案 2 :(得分:0)

尝试使用Map实现此目的。您可以使用Row类

包含行的所有数据
public class Row {

    protected int id;
    protected Object other;
    //etc, getters/setters, whatever you need

}

Map<Integer, Row> rows = new HashMap<>();

//...
Row r = this.rows.get(/*row id*/);
if (r == null) {
    //row doesn't exist
} else {
    //work with row object
}