Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将一维数组保存到另一个二维数组中_Java_Arrays_Arraylist_Multidimensional Array - Fatal编程技术网

Java 将一维数组保存到另一个二维数组中

Java 将一维数组保存到另一个二维数组中,java,arrays,arraylist,multidimensional-array,Java,Arrays,Arraylist,Multidimensional Array,我需要保存一个2D数组(表示图片的一部分)中键入double的1D数组(直方图) 实际上,我已经完成了(简化代码): private ArrayList[][]计算签名(BuffereImage屏幕截图、int blocksizeX、int blocksizeY) { ArrayList[][]签名=新的ArrayList[2][2]; //!!!!!类型安全性:类型ArrayList[]]的表达式需要未经检查的转换才能符合ArrayList[][]的要求!!!!! 对于(int x=0;x

我需要保存一个2D数组(表示图片的一部分)中键入double的1D数组(直方图)

实际上,我已经完成了(简化代码):

private ArrayList[][]计算签名(BuffereImage屏幕截图、int blocksizeX、int blocksizeY)
{
ArrayList[][]签名=新的ArrayList[2][2];
//!!!!!类型安全性:类型ArrayList[]]的表达式需要未经检查的转换才能符合ArrayList[][]的要求!!!!!
对于(int x=0;x<2;x++)
{
对于(int y=0;y<2;y++)
{
签名[x][y]=calculateHistogram(屏幕截图.getSubimage(x*blocksizeX,y*blocksizeY,blocksizeX,blocksizeY));
}
}
返回签名;
}
私有ArrayList calculateHistogram(BuffereImage屏幕截图)
{
double[]historogramrgb=新的double[24];
...
ArrayList imageLUT=新的ArrayList();
imageLUT.add(HistorograMRGB);
返回图像LUT;
}

这是可行的,但我认为这不是一个好的实现。这方面有什么改进吗?此外,我在上面的代码注释中得到了这样一个错误。

如果只添加一个元素,即1D直方图,为什么要使用
ArrayList
。如果您只需要二维数组中的一维数组,如您在问题中所说,
ArrayList
是不必要的,您可以将代码简化为:

private double[][][] calculateSignature(BufferedImage screenshot, int blocksizeX, int blocksizeY)
{
    double[][][] signature = new double[2][2][24];

    for (int x = 0; x < 2; x++)
    {
        for (int y = 0; y < 2; y++)
        {
            signature[x][y] = calculateHistogram(screenshot.getSubimage(x * blocksizeX, y * blocksizeY, blocksizeX, blocksizeY));
        }
    }
    return signature;
}


private double[] calculateHistogram(BufferedImage screenshot)
{
    double[] histogramRGB = new double[24];
    ...
    return histogramRGB;
}
private double[][]计算签名(BuffereImage屏幕截图、int blocksizeX、int blocksizeY)
{
double[][]签名=新的double[2][2][24];
对于(int x=0;x<2;x++)
{
对于(int y=0;y<2;y++)
{
签名[x][y]=calculateHistogram(屏幕截图.getSubimage(x*blocksizeX,y*blocksizeY,blocksizeX,blocksizeY));
}
}
返回签名;
}
专用双[]计算直方图(BuffereImage屏幕截图)
{
double[]historogramrgb=新的double[24];
...
返回historogramrgb;
}

HashMap
对于这些类型的场景来说是一个更有效的工具。或者只使用对象的普通数组而不是
ArrayList
;签名[0][0]=值;“对象的普通数组”肯定会提高性能。
double[][]signature=newarraylist[2][2][24]?这工作正常。但在我看来,问题在于它不像另一个那样透明。在第一种情况下,您可以很容易地想象图片被分成[0][0][0][1][1][0][1]部分,每个部分都包含另一个数组。但是如何解决第一个警告呢?正如我在回答中所说,在示例代码中使用
ArrayList
是完全没有必要的,因为您只添加了一个元素。你为什么不觉得我的答案是透明的?拥有
双[2][2][24]
和良好的代码注释也可以让读者知道您的图像被分成4个部分,每个部分有24个值(直方图)。
private double[][][] calculateSignature(BufferedImage screenshot, int blocksizeX, int blocksizeY)
{
    double[][][] signature = new double[2][2][24];

    for (int x = 0; x < 2; x++)
    {
        for (int y = 0; y < 2; y++)
        {
            signature[x][y] = calculateHistogram(screenshot.getSubimage(x * blocksizeX, y * blocksizeY, blocksizeX, blocksizeY));
        }
    }
    return signature;
}


private double[] calculateHistogram(BufferedImage screenshot)
{
    double[] histogramRGB = new double[24];
    ...
    return histogramRGB;
}