Java Language Matrices multidimensionales y dentadas


Ejemplo

Es posible definir una matriz con más de una dimensión. En lugar de acceder al proporcionar un índice único, se accede a una matriz multidimensional especificando un índice para cada dimensión.

La declaración de matriz multidimensional se puede hacer agregando [] para cada dimensión a una decoración de matriz regular. Por ejemplo, para hacer una matriz int bidimensional, agregue otro conjunto de corchetes a la declaración, como int[][] . Esto continúa para matrices tridimensionales ( int[][][] ) y así sucesivamente.


Para definir una matriz bidimensional con tres filas y tres columnas:

int rows = 3;
int columns = 3;
int[][] table = new int[rows][columns];

La matriz se puede indexar y asignarle valores con esta construcción. Tenga en cuenta que los valores no asignados son los valores predeterminados para el tipo de una matriz, en este caso 0 para int .

table[0][0] = 0;
table[0][1] = 1;
table[0][2] = 2;

También es posible crear una instancia de una dimensión a la vez, e incluso hacer matrices no rectangulares. Estos se conocen más comúnmente como matrices dentadas .

int[][] nonRect = new int[4][];

Es importante tener en cuenta que aunque es posible definir cualquier dimensión de la matriz dentada, se debe definir su nivel anterior.

// valid
String[][] employeeGraph = new String[30][];

// invalid
int[][] unshapenMatrix = new int[][10];

// also invalid
int[][][] misshapenGrid = new int[100][][10];

Cómo se representan los arreglos multidimensionales en Java

Representación de array multidimensional en java.

Fuente de la imagen: http://math.hws.edu/eck/cs124/javanotes3/c8/s5.html


Intialización literal de matriz dentada

Las matrices multidimensionales y matrices irregulares también se pueden inicializar con una expresión literal. Lo siguiente declara y llena una matriz int 2x3:

int[][] table = {
    {1, 2, 3},
    {4, 5, 6}
};

Nota : los subarreglos irregulares también pueden ser null . Por ejemplo, el siguiente código declara y llena una matriz int bidimensional cuyo primer subarreglo es null , el segundo subarreglo es de longitud cero, el tercer subarreglo es de una longitud y el último subarreglo es una matriz de dos longitudes:

int[][] table = {
    null,
    {},
    {1},
    {1,2}
};

Para matrices multidimensionales es posible extraer matrices de dimensión de nivel inferior por sus índices:

int[][][] arr = new int[3][3][3];
int[][] arr1 = arr[0]; // get first 3x3-dimensional array from arr
int[] arr2 = arr1[0]; // get first 3-dimensional array from arr1
int[] arr3 = arr[0]; // error: cannot convert from int[][] to int[]