Arrays

<siehe auch Matrizen für mehrdimensionale Arrays.>

Arrays (Felder) sind eindimensionale Tabellen (Reihungen) von Variablen mit gleichem Typ. Als Typen sind sowohl primitive Datentypen als auch Objekttypen möglich. Auf alle Komponenten kann (im Gegensatz zu Listen) mit Hilfe eines Indexes sofort zugegriffen werden (random access).

Deklaration

Wie Objektreferenzen (siehe Variablen) sind auch Arrays nur über Referenzen zugreifbar. Arrays werden also zunächst deklariert und danach definiert. (Es gibt auch eine Möglichkeit, Arrays gerade bei der Deklaration zu definieren.) Die Deklaration von Arrays geschieht wie folgt:

 int s[];
 Point t[];

Hier werden zwei Arrays vom Basistyp int bzw. vom Klassentyp "Point" deklariert. Es ist noch kein Speicherplatz für die jeweiligen Komponenten geschaffen.

Definition

Zunächst muss Hauptspeicher zur Verfügung gestellt werden, bevor auf die Elemente von Arrays zugegriffen werden kann:

 s = new int[5];
 t = new Point[4];

Mit obiger Definition wird Speicher für 5 Variablen vom Typ int (Ganzzahl) zur Verfügung gestellt. Ebenfalls wird Speicher für 4 Referenzen vom Typ Point erstellt.

Zugriff

Der Zugriff auf die einzelnen Komponenten geschieht mittels Index in eckigen Klammern ('[', ']').
Der kleinste Index ist immer 0 (Null). Somit ist beispielsweise der höchste Index des obigen Arrays 's' gleich 4.


Beispiele

 s[0] = 17; 
 s[1] = 9 * s[0];
 s[4] = s[1] + s[2]; // s[2] == 0 (Defaultwert)
 s[5] = 77; // FEHLER: s indexiert nur von 0 bis 4!

Die einzelnen Komponenten (s[0], s[1], ...) werden wie einzelne verschiedene Variablen behandelt.

Achtung Referenzen

Achtung: In obigem Beispiel wurden noch keine Objekte vom Typ Point geschaffen (instanziert).

Wir müssen die "Punkte" zuerst generieren ...

 t[0] = new Point();
 t[1] = new Point();

... bevor wir auf sie zugreifen können:

 t[0].x = 15;
 t[0].y = 20;

Auch hier verhält sich eine Komponente (t[0]) wie eine eigenständige Variable vom Typ "Point".

Länge

Arrays können ihre Länge (Anzahl der Elemente) mit dem Attribut 'length' angeben. In unserem Beispiel ist "s.length == 5" bzw. "t.length == 4". Die Länge wird meist in Schleifen verwendet:

  for(int i = 0; i < s.length; i++)
  {
    s[i] = i * i;
  }
  for(int j = 0; j < t.length; j++)
  {
    t[j].setLocation(10 * j, 20); 
  }

Direkte Zuweisung

Den Arrays können Werte auch direkt bei der Deklaration zugewiesen werden. Folgendes Beispiel definiert und deklariert einen Array (Feld) im gleichen Schritt:

  int a[] = {4, 5, 3, 5, 2};

Anonyme Arrays

Arrays können seit der JAVA 1.1 Version auch anonym definiert werden. Falls z.B. eine Methode public int sum(int a[]){...} besteht, die alle Werte eines int-arrays zusammenzä`hlt, kann diese Methode mit der neuen Syntax:

 int summe = sum(new int[]{1, 5, 3, 2, 4, 4});

aufgerufen werden. Diese Konstruktion ist analog zu den anonymen Klassen.