Java 将一维数组保存到另一个二维数组中
我需要保存一个2D数组(表示图片的一部分)中键入double的1D数组(直方图) 实际上,我已经完成了(简化代码):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
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;
}