Schabby's Blog
Reserve Orbital Defence Commander
Nov
20.

Dieser Artikel behandelt die folgenden Themen

  • Java Arrays mit Beispielen
  • Arrays in Java in mehreren Dimensionen


Arrays sind die niedrigsts (low-level) aber auch performanteste Datenstruktur in Java. Sie folgen sehr nah der Hardwarefunktionalität im Speicher des Rechners und sind somit eigentlich ein Überbleibsel aus der C/C++ Welt. Dennoch kann man Arrays in vielen Java-Anwendungen heutzutage noch finden.

Grundlagen

Das klassische Array ist eine Folge von Zahlen fester Länge. Diese Folge von Zahlen liegt als Block im Speicher. Schauen wir uns die folgenden zwei Arrays an.

// Definition eines Arrays das 24 Integerwerte halten kann. Zu beginn sind die alle 0.
int[] array = new int[24];
 
// Definition eines Arrays das 8 Integerwerte halten kann
// und dessen Werte vorinitialisiert werden
int[] test = new int[]{33,452,6,23,-5,32,5,-1};
 
// die eckigen Klammern können auch an die Variable geschrieben werden
int someOtherArray[] = new int[4];

Man definiert die Länge des Arrays, also wie viele Zahlen in das Array passen, wenn man das Array erstellt. Dabei wird der benötigte Speicher reserviert. Der Speicherblock kann nicht ohne weiteres wachsen, was wiederum die Länge des Array. Da die Zahlenarten in dem Array immer nur von einem Typ sind, ist zu beginn klar, wieviel Speicher reserviert werden muss. Für int-Arrays müssen zum Beispiel immer 4 bytes pro Wert vorgehalten werden. Das heißt ein int-Array das 24 Werte halten kann, benötigt 24*4=96 bytes. Streng genommen kommen da sogar nochmal 4 Bytes dazu, weil die Länges des Arrays im selben Speicherblock liegt (Backreferenzen für den Garbage Collector werden kurz mal ausgeblendet).

Die Zahl der Werte eines Arrays (oder eben die "Länge" eines Arrays), kann mit der Konstanten length abgefragt werden:

// Definition eines Arrays das 8 Integerwerte halten kann
// und dessen Werte vorinitialisiert werden
int[] test = new int[]{33,452,6,23,-5,32,5,-1};
System.out.println(test.length); // Ausgabe: 7

Um auf die Werte des Arrays zuzugreifen, muss lediglich der Speicherindex angegeben werden:

// Definition eines Arrays das 8 Integerwerte halten kann
// und dessen Werte vorinitialisiert werden
int[] test = new int[]{33,452,6,23,-5,32,5,-1};
 
System.out.println(test[5]); // Ausgabe 32
System.out.println(test[4]); // Ausgabe -5
 
// Um Werte zuzuweisen, wird genauso verfahren
test[5] = 78;
test[4] = 98;
 
System.out.println(test[5]); // Ausgabe 78
System.out.println(test[4]); // Ausgabe 98

Als wichtiger Sonderfall sein bemerkt, dass bei jedem Zugriff auf das Array geprüft wird, ob der Index noch innerhalb der Länge des Arrays liegt. Wenn der Index kleiner 0 oder größer als length ist, wird eine IndexOutOfBoundsException geworfen. Siehe zB:

int[] test = new int[]{33,452,6,23,-5,32,5,-1};
 
// schmeisst IndexOutOfBoundsExcpetion!!!
System.out.println(test[5423]);

Arrays aus verschiedenen Datentypen

In den Grundlagen haben wir auf Arrays aus natürlichen Zahlen gearbeitet. Prinzipiell sind natürlich auch andere Datentypen möglich. Schauen wir uns als erstes Beispiele mit primitiven Datentypen an.

int[] intArray = new int[]{33,452,6,23,-5,32,5,-1};
float[] floatArray = new float[3];
double[] doubleArray = new double[521];

Es können auch Arrays aus Objekten gebaut werden. Dabei sei zu beachten, dass beim erstellen des Arrays nicht die Objekte selbst erstellt werden, sondern nur die Pointer auf mögliche Objektinstanzen.

// erstelle 10 Pointer auf Object. Die Pointer sind
// erstmal alle NullPointer.
Object[] objectArray = new Object[10];
 
// wir instatitieren ein neues Objekt mit "new" und lassen den Pointer an 
// Index 0 und 3 auf das neue Objekt zeigen.
objectArray[0] = new Object();
objectArray[3] = new Object();
 
// es wird die toString() Methode des gerade instatitierten 
// Objektes ausgegeben
System.out.println(objectArray[0]);
 
// NullPointerException, weil an Index 2 kein valider Pointer
// auf ein Objekt zeigt.
System.out.println(objectArray[2]);

Eine interessante Mischform nimmt dabei wieder der String ein, da er sich wie immer wie ein Objekt verhält, das aber nicht mit new instatiiert werden muss:

String[] stringArray = new String[42];
stringArray[0] = "hallo";
stringArray[1] = "Juhuuu";
stringArray[2] = "Blablalb";
 
System.out.println(stringArray[0]); // Ausgabe: hallo
System.out.println(stringArray[2]); // Ausgabe: Blablalb
 
// NullPointerException!
System.out.println(stringArray[3]);

So viel zu den Basisics über Arrays. Wenn Euch was fehlt oder Ihr den Post gut fandet, laßt es mich gern in Form eines Kommentars wissen.


Post Comment

Please notice: Comments are moderated by an Admin.