如果我想在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项目有关,但更多只是对一般情况感兴趣;如果有不同的语言会根据使用的方法产生影响,那么这些信息对于将来的参考也是有用的。
答案 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
}