7.3 Mehrdimensionale Felder

Eindimensionale Felder entsprechen Listen mit einem wahlfreien Zugriff. Java erlaubt auch die Benutzung von zwei- und mehrdimensionalen Feldern.

Zweidimensionale Felder

Ein zweidimensionales Feld besteht entsprechend aus Zeilen und Spalten. Die Java Syntax hierzu ist eine Konkatenierung von eckigen Klammern. Zur Erzeugung eines Feldes mit 3 Zeilen und 6 Spalten nutzt man die folgende Notation:

int[][] array1 = new int[3][6];

Hiermit ergibt sich eine Speicherstruktur die aus einem Spaltenfeld besteht welches alle Zeilenfelder enthält um eine zweidimensionale Struktur aufzuspannen. Man kann hier jetzt 3*6=18 Werte speichern:

 

Das Setzen und Lesen von Werten geschieht wie folgt:

int k = 222;
array1[2][5]= k;
int n = array1[0][0];

Aufzählende Initialisierung mehrdimensionaler Felder

Auch bei mehrdimensionalen Feldern ist eine aufzählende Initialisierung möglich:

int[][] array1 = {{1,2,3,4,5,6},{5,10,15,20,25,30},{10,20,30,40,50,60}}

Hiermit ergibt sich eine zweidimensionale Tabelle mit der folgenden Belegung:

Bestimmung der Größe mehrdimensionaler Felder

Das Attribut length erlaubt auch bei mehrdimensionalen Feldern die Bestimmung der Größe. Hier liefert das Attribut jedoch nicht die Gesamtgröße der Datenstruktur sondern nur die Größe einer bestimmten Dimension.

int d =array1.length;

liefert im oben gezeigten Beispiel eine 3 für die erste Dimension, die Zeilen.

int d = array1[2].length;

gibt eine 6 zurück. Da die dritte Zeile 6 Elemente hat.

Anmerkung: Höher dimensionale Felder haben nicht unbedingt in allen Dimensionen die gleiche Größe. Dies bedeuted, dass ein zweidimensionales Feld muss nicht rechteckig sein muss!

Die folgende Implementierung erzeugt ein "dreieckiges" zweidimensionales Feld:

int[][] array1;
array1 = new int[3][];
array1[0] = new int[1];
array1[1] = new int[2];
array1[2] = new int[3];

Die Speicherstruktur zu diesem Feld sieht wie folgt aus:

Eine aufzählende Initialisierung ist auch möglich:

int[][] array1 = {{1},{11,22},{111,222,333}};

Das length Attribut liefert bei dieser Struktur die unterschiedlichsten Ergebnisse.

Höherdimensionale Felder

Nach dem gleichen Verfahren können dreidimensionale oder noch höherdimensionale Felder erzeugt und verwaltet werden.

Person[][][] Mitarbeiter = new Person[10][10][10];
Mitarbeiter[7][8][9] = new Person ("Jane","Doe");

Im vorliegenden Beispiel handelt es sich um ein dreidimensionales Feld mit einem Objekttyp (Person). Bei Objektfeldern werden nur die Felder angelegt nicht aber die zugehörigen Objekte. Sie müssen individuell erzeugt werden. Nach der initialen Felderzeugung sind alle Felder mit Nullreferenzen belegt. Mit dieser Belegung lässt sich normalerweise schlecht arbeiten. Bei Basistypen ist dies anders. Sie werden auch auf Null initialisiert und können direkt verwendet werden. Bei Feldern mit Referenzen werden jedoch nicht direkt die benötigten Objekte angelegt.