Mehrdimensionale Arrays
Kurz: Ein Array, dessen Elemente selbst wieder Arrays sind — in der Praxis meist zweidimensional, z. B. für Tabellen oder Rasterdaten genutzt.
Genauer: Deklaration z. B. int[][] matrix = new int[3][4]; für ein 3×4-Raster. Java implementiert das intern als “Array von Arrays”, die Zeilen müssen dabei nicht zwingend gleich lang sein (jagged arrays). Zugriff über zwei Indizes: matrix[zeile][spalte].
Im Detail
int[][] matrix = new int[3][4]; // 3 Zeilen, 4 Spalten, alle Werte auto-initialisiert mit 0
matrix[0][0] = 1;
matrix[2][3] = 99;
// Direkt mit Werten initialisieren
int[][] tictactoe = {
{1, 0, 1},
{0, 1, 0},
{1, 0, 0}
};
// Über eine 2D-Struktur iterieren - verschachtelte Schleifen
for (int zeile = 0; zeile < tictactoe.length; zeile++) {
for (int spalte = 0; spalte < tictactoe[zeile].length; spalte++) {
System.out.print(tictactoe[zeile][spalte] + " ");
}
System.out.println();
}
// Jagged Array: Zeilen mit UNTERSCHIEDLICHER Länge
int[][] jagged = new int[3][];
jagged[0] = new int[]{1};
jagged[1] = new int[]{1, 2, 3};
jagged[2] = new int[]{1, 2};Weil Java mehrdimensionale Arrays intern tatsächlich als “Array, dessen Elemente selbst Arrays sind” umsetzt (nicht als ein zusammenhängender Speicherblock wie in manchen anderen Sprachen), muss jede Zeile nicht zwingend gleich lang sein — solche “gezackten” Arrays (jagged arrays) sind in Java vollkommen valide, auch wenn ihre praktische Verwendung eher selten ist. Beim Iterieren über 2D-Strukturen ist tictactoe[zeile].length (die Länge der EINZELNEN Zeile) statt der äußeren .length wichtig, sobald jagged arrays im Spiel sind — sonst drohen ArrayIndexOutOfBoundsExceptions bei kürzeren Zeilen.
Speicherlayout: Array von Arrays
Anders als z. B. in C, wo ein 2D-Array als ein einziger, zusammenhängender Speicherblock existiert, ist ein Java-2D-Array technisch ein Array, dessen Elemente jeweils REFERENZEN auf eigenständige, separate 1D-Arrays sind — jede Zeile ist ein eigenes Objekt im Heap-Speicher, verstreut statt garantiert zusammenhängend abgelegt. Das erklärt sowohl die Möglichkeit von jagged arrays (jede Zeile ist unabhängig und kann eine andere Länge haben) als auch, warum matrix.length nur die Anzahl der ZEILEN liefert, nicht die Gesamtanzahl aller Elemente.
Dreidimensionale und höherdimensionale Arrays
Das Prinzip lässt sich beliebig weiterführen — int[][][] wuerfel = new int[3][4][5]; erzeugt ein dreidimensionales Array, zugreifbar über drei Indizes (wuerfel[x][y][z]). In der Praxis werden mehr als zwei Dimensionen selten gebraucht (am ehesten bei wissenschaftlichen Berechnungen oder Volumendaten) — für die meisten alltäglichen Aufgaben mit strukturierten Daten sind Collections wie verschachtelte Lists oder eigene Klassen oft die lesbarere Alternative zu tief verschachtelten Arrays.
Siehe auch: Arrays, Index, Collections