从JAVA中的多维数组中获取一维数组

时间:2011-08-15 20:39:25

标签: java multidimensional-array

我是Java新手(第2天),所以如果没有意义,请告知并原谅我。

我有一个二维数组,我想定义一个新数组,它包含第二维中特定位置的所有第一维(下面的例子)。我能想到的唯一方法是使用for循环,如下所示:

double[][] twoDimArray = new double[5000][200];
// some code defining twoDimArray

double[] oneDimArray = new double[5000];
for (int i=0; i<5000; ++i) {
    oneDimArray[i] = twoDimArray[i][199];
}

这很好用,但有更清洁的方法吗?也许是这样的:

double[] oneDimArray = twoDimArray[][199];

感谢。

5 个答案:

答案 0 :(得分:4)

Java中没有多维数组,只有数组数组。但即使存在,尺寸也要存储在行主要或列主要顺序中。取决于此,相同“行”或相同“列”(即第一或第二维)中的单元连续地存储在存储器中并且可以直接分配给一维阵列。

由于您试图提取连续存储的维度,因此没有比for循环更好的方法。另一方面,如果你想从第一个位置199获得所有元素,你可以double[] oneDimArray = twoDimArray[199];

因此,如果在此维度中提取是您的常见用例,那么存储交换维度的数据是有意义的,即您可以这样做:

double[][] twoDimArray = new double[200][5000]; // dimensions are swaped here
// some code defining twoDimArray (with swapeddimensions)

double[] oneDimArray = twoDimArray[199];

答案 1 :(得分:2)

如果我正确理解您的问题,

twoDimArray[0]实际上是数组的第一个维度。

想象一下2D数组作为一堆1 D数组的行。因此,如果你有twoDimArray[5000][200],那么你有5000行(1D数组),每行有200个点。

所以twoDimArray[2]实际上是第三行(1D数组),即double[]

编辑:由于在java中有阵列数组而不是2D数组,你可能想要将数组定义的顺序颠倒为数组[200] [5000]以便你可以在一行中轻松访问您想要的维度。

答案 2 :(得分:1)

您正在做的是最有效的方式。没有快捷方式(比如某些语言可能有newarr = oldarr[:][199];或其他内容)。如果你不得不多做几次,我建议你做一个方法来做。

double[] acquireRow(double[][] orig, int row) {
    double[] ret = new double[orig.length];
    for(int i = 0; i < ret.length; i++) {
        ret[i] = orig[i][row];
    }
    return ret;
}

答案 3 :(得分:1)

试试这个:

Double[] oneDimArray = new ArrayList<Double[]>(Arrays.asList(twoDimArray)).get(199);

答案 4 :(得分:0)

我认为你必须在创建数组时指定两个维度。如果由于不确定而不想指定该值,请阅读“列表”数据类型。