数组里面的二维数组?

时间:2013-10-16 17:27:31

标签: java arrays

是否可以将数组放入二维数组中?解释:我需要一个二维字节数组,但每个单元格还需要三个字节值。它看起来像这样:

+-------------+-------------+
| 123,234,125 | 255,109,167 |
+-------------+-------------+
| 172,144,134 | 145,212,124 |
+-------------+-------------+

或者采用更合适的格式:

[ [ [ 123,234,125 ] , [ 255,109,167 ] ] , [ [ 172,144,134 ] , [ 145,212,124 ] ] ]

这将是一个包含三个字节数组的二维数组。这在Java中可行吗?

5 个答案:

答案 0 :(得分:3)

完全可能。

以下是一个例子:

byte[][][] myAwesomeByteArray = 
            { 
                { 
                    { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } 
                },
                { 
                    { 9, 10, 11 }, { 12, 13, 14 }, { 15, 16, 17 } 
                },
                { 
                    { 18, 19, 20 }, { 21, 22, 23 }, { 24, 25, 26 } 
                } 
            };
System.out.println(Arrays.deepToString(myAwesomeByteArray));

输出:

[[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]

答案 1 :(得分:2)

是的,当然这是可能的。您可以使用3D阵列:

byte[][][] array = new byte[w][h][3];
array[0][0][0] = 123;
array[0][0][1] = 234;
array[0][0][2] = 125;

或使用2D数组的整数。整数是4个字节,足以满足您的要求:

int[][] array = new int[w][h];
array[0][0] = (123 << 16) | (234 << 8) | (125);

答案 2 :(得分:2)

有两种基本方法可以完成您要做的事情。这里有两个尝试的例子。

int [][][] firstArray = new int[][][] {{{ 123,234,125 } , { 255,109,167 }} , {{ 172,144,134 } , { 145,212,124 }}};

int [][][] secondArray = new int[2][2][3];

第一个示例假设您确切知道数组的内容是什么,第二个示例使您在填充数据时更加灵活。

希望它有所帮助,如果您需要更多,请告诉我。

答案 3 :(得分:0)

您可以尝试使用此代码,但只需进行少量修改即可根据您的要求进行更改。此处插入的所有值都是静态的,您可以将其设置为动态&amp;插入。根据您的要求将int更改为byte。

public static void main(String args[])
{
    /*Data Insertion*/
    int a[]=new int[3];
    a[0]=123;
    a[1]=234;
    a[2]=125;
    int a1[]=new int[3];
    a1[0]=255;
    a1[1]=109;
    a1[2]=167;
    int a2[]=new int[3];
    a2[0]=172;
    a2[1]=144;
    a2[2]=134;
    int a3[]=new int[3];
    a3[0]=145;
    a3[1]=212;
    a3[2]=124;
    Object s[][]=new Object[2][2];
    s[0][0]=a;
    s[0][1]=a1;
    s[1][0]=a2;
    s[1][1]=a3;
    /*Data Retrieval*/
    for(int i=0;i<s.length;i++)
    {
        for(int j=0;j<2;j++)
        {
            int sg[]=(int[])s[i][j];       
            System.out.println("Value: "+sg[0]+" "+sg[1]+" "+sg[2]);
        }
    }
}

答案 4 :(得分:0)

正如其他人指出的那样,这是可能的。

当怀疑时,请考虑其他方式:是否有理由认为可能?在数学和编程中,它通常采用这种方式:允许任何未被明确禁止的内容。

数组可以包含任何类型元素。那为什么不是阵列?

现在考虑一个数组中的数组:它们的元素是什么类型的?参见上一段,然后根据需要尽可能远/深,因为它没有说明你可以走多远/多远。除了内存限制等问题......