Array & Listen

Seit Beginn meiner Ausbildung zum Fachinformatiker für Anwendungsentwicklung am 01.08.2017, beschäftige ich mich mit einem Java-Tutorial, welches mein Ausbilder Stefan mit jedem seiner Azubis durcharbeitet.Nach den ersten Kapiteln und den damit verbundenen praktischen Aufgaben stieß ich irgendwann auf Arrays und Listen. Da mir nach der Einführung nicht so wirklich klar war, was jetzt überhaupt die zentralen Vor- und Nachteile zwischen diesen beiden Möglichkeiten sind, dachte ich mir, dass ich bestimmt nicht der einzige Programmieranfänger bin, der sich genau diese Frage stellt:

Was genau sind Arrays und Listen und wie verwende ich sie?

In meinem folgenden Fachartikel werde ich diese Frage beantworten und aufzeigen, wann ich welche der beiden Möglichkeiten verwenden sollte. Der Artikel bezieht sich hierbei im Wesentlichen auf die Programmiersprache Java. In anderen Sprachen können die Eigenschaften und die Deklaration teilweise anders sein.

Arrays und Listen haben im Prinzip dieselbe Aufgabe: mehrere Werte speichern.

Arrays

Das Array (auch Feld oder Reihung genannt) ist ein Datentyp, welcher mehrere Werte hintereinander zusammenhält bzw. speichert. Vor jedem der Plätze steht ein ganzzahliger Index, welcher dazu dient, auf den Wert an einer bestimmten Stelle zuzugreifen. Wichtig ist, dass in einem definierten Array nur Werte vom selben Datentyp abgelegt werden können. Das bedeutet, in einem Array vom Datentyp int[] können nur ganze Zahlen stehen, bei einem String[]nur Zeichenketten und so weiter.

Ein Array ist nicht redimensionierbar. Das heißt, dass bei der Definition eine bestimmte Länge festgelegt werden muss. Die Länge im Nachhinein zu ändern, ist nicht möglich. Das kann nützlich sein, wenn ich von Anfang an weiß,welche Anzahl von Werten ich in meinem Array haben werde. In der Berufsschule habe ich mir zum Beispiel ein kleines Programm geschrieben, welches den Benzinverbrauch eines Jahres berechnet. Da das Jahr 12 Monate hat und selbst Donald Trump keine Chance hat, das zu ändern, hab ich mir ein Array der Länge 12 definiert.
String[] months = new String[12];

Um mein Array von Anfang an mit den Monaten zu füttern, benutze ich geschweifte Klammern und trenne alle Werte mit einem ,:
String[] month = new String[] {"Januar", "Februar", "Maerz",(...), "Dezember"};

Jetzt habe ich alle meine Monate in einem Array festgelegt und kann über den Index ganz easy auf meine einzelnen Monate zugreifen. Ganz easy? Leider nicht. Mein Array weiß jetzt zwar, dass es die Länge 12 besitzt, fängt dabei aber nicht wie wir Menschen bei Eins an zu zählen, sondern bei Null. Das bedeutet, dass mein Monat Januar auf dem Index 0 liegt und der Dezember auf 11. Da Arrays iterierbar sind, muss ich beim Verwenden einer  for-Schleife also genau überlegen, wie weit die Schleife zählen soll. Da das aber ziemlich lästig wäre, gibt es natürlich eine andere und bessere Lösung.

ForEach-Schleife

Die ForEach-Schleife funktioniert im Prinzip genau wie die gewöhnliche For-Schleife. Der Unterschied ist, dass wir bei der ForEach-Schleife keine Laufvariable brauchen. Das bedeutet, dass die Schleife bei jeder Iteration einen Wert zurückgibt. Damit das ganze überhaupt funktioniert, muss also schon irgendeine Datenstruktur vorhanden sein. Für unser Array würde dasganze so aussehen:
for (String month: months)
{
System.out.println("Monat: " + month);
}

Ausgabe auf der Console:

Monat: Januar
Monat: Februar
(…)
Monat: Dezember

Durch die ForEach-Schleife muss der Entwickler also nicht mehr darauf achten, welcher der maximale Index ist, sondern kann sich auf den Inhalt konzentrieren, welcher uns im eigentlichen Sinne als einziges interessiert.

Listen

Wie ich oben bereits erwähnt habe, haben Listen dieselbe Kernaufgabe wie Arrays. Der wesentliche Unterschied ist: Listen sind dynamisch und somit im Gegensatz zu einem Array redimensionierbar. Man kann also sagen, eine Liste ist wie ein Array, nur intelligenter. Außerdem sind Listen dazu in der Lage, Werte von verschiedenen Datentypen anzunehmen, sofern sie nicht explizit parametrisiert werden:

List myList = new ArrayList(); //Liste welche alle Datentypen aufnimmt
List<Integer> myIntegerList= new ArrayList<>; //Liste, welche nur Daten vom Typ Integer aufnimmt

Jetzt habt ihr auch schon gesehen wie die Syntax beim Erstellen eines Arrays und einer Liste aussieht: Der Datentyp eines Arrays wird mit eckigen Klammern (brackets) festgelegt und der Datentyp einer Liste mit den spitzen Klammern (angle brackets).
Beim Initialisieren von myList (new ArrayList<>;) kann seit Java 7 der Datentyp weggelassen werden. Der Compiler holt sich den Datentyp aus dem Kontext. Diese Eigenschaft nennt sich Typ-Inferenz (engl. type inferenz). Die angle brackets fungieren hierbei als Operator und werden deswegen Diamantoperator (engl. diamond operator) genannt.

Vielleicht ist dir aufgefallen, dass ich bei der zweiten, parametrisierten Liste den Datentyp Integer verwendet habe. Warum nicht einfach int? Nun, Listen können nur Referenzen (Verweis auf ein Objekt) aufnehmen. Deswegen ist es nicht möglich, einen primitiven Datentyp zu verwenden. Die Lösung ist eine sogenannte Wrapper-Klasse. Diese kapselt kurz gesagt einen primitiven Wert in ein Objekt, sodass wir eine Referenz erhalten. Übrigens: Ein Array kann im Gegensatz zur Liste auch von einem primitiven Datentyp sein.

Doch wann sollte ich als Entwickler nun ein Array oder eine Liste verwenden? Meine Empfehlung ist es, immer eine Liste zu verwenden, sofern ich mir nicht sicher bin, ob die Länge eventuell nachträglich nochmal geändert werden müsste. Bei meinem Beispiel mit den Monaten ist ziemlich klar, dass die Länge für immer dieselbe bleiben wird. Wenn ich allerdings beispielsweise die Namen meiner Arbeitskollegen innerhalb der Abteilung irgendwo ablegen möchte, kann ich mir ziemlich sicher sein, dass sich die Anzahl immer wieder ändern wird.

Ich hoffe, dass dir meine kleine Einführung in das Thema gefallen hat. 🙂
Gerne nehme ich Verbesserungsvorschläge und Anmerkungen entgegen. Lass mir dazu doch einfach einen Kommentar hier. 🙂

Arrays & Listen

4 Gedanken zu „Arrays & Listen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.