int[][]
MehrdimensionalEin Array von Arrays — stellt Tabellen, Matrizen und Gitter dar. Jede Zeile ist ein eigenständiges int[]-Array.
0Visualisierung
3 Zeilen × 3 Spalten — matrix[1][1] = 5 (Mitte)
Deklaration
So reservierst du Speicher für einen int[][].
// Deklaration: [Zeilen][Spalten]
int[][] matrix = new int[3][3]; // 3×3 Matrix, alle 0
// Rechteckig: alle Zeilen gleich lang
int[][] tabelle = new int[4][5]; // 4 Zeilen, 5 Spalten
// Zackig (jagged): unterschiedliche Zeilenlängen
int[][] dreieck = new int[3][];
dreieck[0] = new int[1]; // [0]
dreieck[1] = new int[2]; // [0, 0]
dreieck[2] = new int[3]; // [0, 0, 0]Initialisierung
Verschiedene Wege, ein int[][] mit Werten zu befüllen.
// Initialisierung einer 3×3 Matrix
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Schachbrettmuster
int[][] schach = new int[8][8];
for (int z = 0; z < 8; z++) {
for (int s = 0; s < 8; s++) {
schach[z][s] = (z + s) % 2; // 0 oder 1 abwechselnd
}
}
// Einheitsmatrix (Identitätsmatrix)
int n = 4;
int[][] einheit = new int[n][n];
for (int i = 0; i < n; i++) {
einheit[i][i] = 1; // Diagonale = 1, Rest = 0
}Typische Operationen
Zugriff, Änderung, Iteration und häufige Patterns mit int[][].
int[][] matrix = {{1,2,3},{4,5,6},{7,8,9}};
// Zugriff: [Zeile][Spalte]
int mitte = matrix[1][1]; // 5
// Dimensionen
int zeilen = matrix.length; // 3
int spalten = matrix[0].length; // 3
// Iteration mit verschachtelten Schleifen
for (int z = 0; z < matrix.length; z++) {
for (int s = 0; s < matrix[z].length; s++) {
System.out.printf("%3d", matrix[z][s]);
}
System.out.println();
}
// 1 2 3
// 4 5 6
// 7 8 9
// For-each Variante
for (int[] zeile : matrix) {
for (int wert : zeile) {
System.out.print(wert + " ");
}
}
// Matrix transponieren
int[][] transponiert = new int[3][3];
for (int z = 0; z < 3; z++) {
for (int s = 0; s < 3; s++) {
transponiert[s][z] = matrix[z][s];
}
}
// Matrix-Multiplikation (A × B)
int n = 3;
int[][] a = {{1,2},{3,4}}, b = {{5,6},{7,8}};
int[][] c = new int[2][2];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
c[i][j] += a[i][k] * b[k][j];
// Ausgabe
import java.util.Arrays;
System.out.println(Arrays.deepToString(matrix)); // [[1,2,3],[4,5,6],[7,8,9]]Hintergründe & Details
int[][] ist technisch gesehen ein "Array von Arrays" — kein echter zweidimensionaler Speicherblock wie in C. Jede Zeile ist ein eigenständiges int[]-Objekt. Das erlaubt "jagged arrays" (zackige Arrays), bei denen Zeilen unterschiedliche Längen haben können.
Speicherlayout: Da jede Zeile ein separates Objekt ist, liegen die Zeilen nicht zwingend hintereinander im Speicher. Das kann bei großen Matrizen Cache-Misses verursachen. Für hochperformante Berechnungen nutzt man oft ein 1D-Array mit manueller Indexberechnung: arr[z * spalten + s].
Zeilen-Vorrang (Row-Major): Java-2D-Arrays sind zeilenweise gespeichert. Das bedeutet: matrix[z][s] ist effizient, wenn du in der inneren Schleife über s (Spalten) iterierst — das nutzt den CPU-Cache optimal.
Typische Anwendungsfälle: Schachbretter, Spielfelder, Bilder (Pixel-Gitter), Matrizen in der linearen Algebra, Tabellendaten, Labyrinthe, Dynamic-Programming-Tabellen (z.B. Longest Common Subsequence).
Tipp — Arrays.deepToString(): Arrays.toString() zeigt nur die Zeilenadressen. Für die vollständige Ausgabe eines 2D-Arrays immer Arrays.deepToString(matrix) verwenden.