Java Language Matrici multidimensionali e frastagliate


Esempio

È possibile definire una matrice con più di una dimensione. Invece di accedere con un singolo indice, è possibile accedere a un array multidimensionale specificando un indice per ogni dimensione.

La dichiarazione dell'array multidimensionale può essere eseguita aggiungendo [] per ogni dimensione a una normale declinazione dell'array. Ad esempio, per creare un array int bidimensionale, aggiungi un altro insieme di parentesi alla dichiarazione, ad esempio int[][] . Questo continua per gli array 3-dimensionale ( int[][][] ) e così via.


Per definire una matrice bidimensionale con tre righe e tre colonne:

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

L'array può essere indicizzato e assegnare valori ad esso con questo costrutto. Si noti che i valori non assegnati sono i valori predefiniti per il tipo di un array, in questo caso 0 per int .

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

È anche possibile creare un'istanza di una dimensione alla volta e persino creare array non rettangolari. Questi sono più comunemente indicati come matrici frastagliate .

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

È importante notare che, sebbene sia possibile definire qualsiasi dimensione della matrice seghettata, è necessario definire il livello precedente.

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

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

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

Come gli array multidimensionali sono rappresentati in Java

Rappresentazione di array multidimensionali su Java

Fonte immagine: http://math.hws.edu/eck/cs124/javanotes3/c8/s5.html


Intializzazione letterale a matrice seghettata

Array multidimensionali e matrici frastagliate possono anche essere inizializzati con un'espressione letterale. Quanto segue dichiara e popola un array int 2x3:

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

Nota : i sottotitoli seghettati potrebbero anche essere null . Ad esempio, il seguente codice dichiara e popola un array int bidimensionale il cui primo sottoarray è null , il secondo sottoarray è di lunghezza zero, il terzo sottoarray è di una lunghezza e l'ultimo sottoarray è un array di due lunghezze:

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

Per array multidimensionali è possibile estrarre array di dimensioni di livello inferiore dai loro indici:

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[]