Vorlesung Informatik 2 - Teil A: Java Kurs

3.1 Arrays von elementaren Datentypen

Um viele Daten in einer Variable zu speichern, gibt es den Datentyp Array.

int x,y,z;   // skalare Variablen
int[] a,b,c; // Arrays

Skalare Variablen von einem elementaren Datentyp (in, float, double, long, boolean, ...) speichern genau eunen Wert des jeweiligen Typs.

int[] ist ein spezieller Datentyp: int-Array. Wir können darin viele Werte vom Typ int unter einem Namen speichern.

Arrays sind Objekte!

Wenn wir also schreiben:

int[] a; 
dann ist  a eine Variable vom Typ int-Array, die zunächst den Wert null hat, also auf kein Objekt zeigt.

Wie alle Objekte werden auch Arrays mit new initialisiert, der Konstruktor hat einen Parameter, der in eckigen Klammern geschrieben wird:

a=new int[1000];

Jetzt zeigt a auf ein Objekt vom Typ int[], welches ein Array der Länge 1000 ist, also 1000 ganze Zahlen speichern kann. Die Variable a enthält nur die Hauptspeicheradresse des Arrays.

Eigenschaften von Arrays:

  • Die Länge eines Arrays ist fest, sie kann nachträglich nicht mehr geändert werden. Im Gegensatz dazu wächst ein LinkedList Objekt dynamisch.
  • Die Eigenschaft length gibt die Länge zurück, a.length hat also im obigen Beispiel den Wert 1000.
  • Alle Werte eines Arrays werden vom Konstruktor mit 0 bzw. false initialisiert.
  • Um auf einzelne Werte zuzugreifen, verwendet man einen Index, der zwischen 0 und length-1 liegt:
    a[0]=10;
    a[1]=44;
    a[999]=33;
  • Wenn der Index kleiner 0 oder größer gleich length ist, wird eine IndexOutOfBoundsException geworfen. Neben der NulPointerException ist dies der häufigste Fehler, der zum Programmabbruch führt.
  • Die Werde eines Arrays stehen im Hauptspeicher dicht hintereinander, dadurch sind Arrays sehr effizient im Vergleich zu einer LinkedList.

Häufig will man alle Element eines Arrays verarbeiten, dann verwendet man eine Schleife:

   for(int i=0;iya.length;i++){
      a[i] = i+5;
   }

Wenn man die Werte nur auslesen will und der Index keine Rolle spielt, kann man auch die vereinfachte for-Schleife verwenden:

   int summe=0;
   for(int x:a){
      summe+=x;
   }

Beispiel: finde das größte Element eines Arrays:

   int max=a[0];
for(int x:a) {
    if(x>max) max=x;
}

Will man wissen, an welcher Position das größte Element steht, muss man eine Zählschleife verwenden:

   int ixMax=0;
for(int i=1;i<a.length;i++){
    if(a[i]>a[ixMax]) ixMax=i;
}

Literale für vordefinierte Arrays:

Statt eines Konstruktors kann man für kurze Arrays auch Literale verwenden:

  double[] vektor = {15.4, 3.2, 8.0};

Hier wird eine double-Array der Länge 3 mit den Anfangswerten 15.4, 3.2 und 8 erzeugt.


Lehrvideo  (YouTube)