Java Tutorial #17

Objektsammlungen in Java verwenden

2018-12-03 | credit: AdobeStock

Thema in Kurzform

Der Vorteil einer Objektsammlung ist die Möglichkeit, alle Objekte der Sammlung effizient gemeinsam verwalten können. Typische Sammlungen sind das Array und die ArrayList.

Array

Das Array gehört zu den ältesten Sammlungsstrukturen in der Programmierung überhaupt. Wir haben bereits in einem früheren Kapitel einiges über Arrays in Java gelernt. Fassen wir die wichtigsten Regeln nochmal kurz zusammen:

  • Ein Array hat eine feste Größe; sie kann nach der Erzeugung des Arrays nicht mehr verändert werden.
  • Die einzelnen Array Elemente müssen denselben (oder kompatiblen) Datentyp haben.
  • Elemente des Arrays können primitive Datentypen oder Objekttypen sein.

Da die Größe eines Array bei der Erzeugung festgelegt wird und danach nicht mehr geändert werden kann, setzen wir das Array dann ein, wenn wir zu Beginn schon wissen, wieviele Elemente die Sammlung haben soll.

Array erstellen und Objekte hinzufügen

Um ein Array als Sammlung für Objekte zu erstellen, verwenden wir folgende Syntax:

Turtle[] sammlung = new Turtle[6];

In diesem Beispiel haben wir ein Array für Objekte der Klasse Turtle erstellt. Ausschließlich Objekte dieses (oder kompatiblen) Typs können in das Array aufgenommen werden.

Unser Array kann außerdem maximal sechs Turtle-Objekte aufnehmen.

Noch ist unsere Sammlung leer. Erzeugen wir also zunächst ein paar Turtle-Objekte und weisen sie dann gültigen Positionen im Array zu:

//Turtle-Objekte erzeugen
Turtle t1 = new Turtle();
Turtle t2 = new Turtle();

//Turtle-Objekte dem Array hinzufügen
sammlung[0] = t1;
sammlung[2] = t2;

Die beiden Turtle-Objekte t1 und t2 werden dem Array als Elemente auf den Index-Positionen 0 bzw. 2 hinzugefügt. Die übrigen Array-Positionen bleiben leer (genauer gesagt: null). Grafisch darf man sich das so vorstellen:

Java Array Objektsammlung

Nun können wir über die gesamte Sammlung mit einer Schleife iterieren:

for(int i = 0; i < sammlung.length; i++){
    if(sammlung[i] != null){
        System.out.println(sammlung[i]);
        // oder tu sonstwas mit den Turtle-Objekten
    }
}

Initialisierungsliste

Mit einer Initialisierungsliste können wir die Array-Erstellung und das Zuweisen der einzelnen Elemente auch in einem Schritt erledigen:

Turtle t1 = new Turtle();
Turtle t2 = new Turtle();

Turtle[] sammlung = {t1, t1};

Nicht vergessen: Ein so erstelltes Array hat automatisch die Länge wie in den geschweiften Klammern angegeben (hier: 2).

ArrayList

Im Gegensatz zum klassischen Array liegt der Unterschied einer ArrayList in folgenden zwei Punkten:

  • Die Größe einer ArrayList ist nicht endgültig festgelegt, sondern passt sich der Anzahl der Elemente flexibel an.
  • Die ArrayList kann ausschließlich Objekttypen in die Sammlung aufnehmen (keine primitiven Datentypen!).

ArrayList erstellen

Um ein ArrayList-Objekt zu erzeugen, müssen wir zuerst die Klasse ArrayListimportieren. Da es sich bei der ArrayList um eine Bibliotheksklasse aus dem Paket java.util handelt, steht sie erst durch folgende import-Anweisung zur Verfügung:

import java.util.ArrayList;

Der Import macht die Klasse ArrayList innerhalb unserer Klassendefinition erst verfügbar. Die import-Anweisung muss immer direkt vor der Klassendefinitonstehen, also so:

package paket1;

import java.util.ArrayList;

public class ArrayListExample {
  // Klassencode
}

Top! Jetzt können wir ArrayList-Objekt erstellen und das geht so:

ArrayList<Turtle> sammlung = new ArrayList<>();

Wir deklarieren zunächst die Referenzvariable sammlung der Klasse ArrayList. Innerhalb der ersten spitzen Klammern geben wir an, welcher Typ von Objekten in der Sammlung gespeichert werden soll (hier: Objekte der Klasse Turtle).

Nach dem = Zeichen erstellen wir mit dem new-Operator ein neues ArrayList-Objekt und weisen es der Variablen sammlung zu. Die zweiten spitzen Klammern rechts dürfen diesmal leer bleiben (sog. Diamond-Notation).

Eine Angabe der Größe der Sammlung (wie beim Array) ist nicht nötig, da sich die Größe der Sammlung ja an die Anzahl der Elemente anpasst.

Da die ArrayList eine generische Klasse ist, muss sie immer mit einem zweiten Typ parametrisiert werden (in eckigen Klammern). Der zweite Typ beschreibt den Objekttyp der Elemente, die wir in die Sammlung aufnehmen wollen.

Elemente hinzufügen mit add()

Die Klasse ArrayList stellt einige Methoden bereit, um die Sammlung überaus einfach bedienen zu können. Die wichtigste Methode lautet add(), mit der wir ein Objekt als Element der Sammlung hinzufügen können:

ArrayList<Turtle> sammlung = new ArrayList<>();

Turtle t1 = new Turtle();
Turtle t2 = new Turtle();
Turtle t3 = new Turtle();

sammlung.add(t1); //Objekt t1 der ArrayList hinzufügen
sammlung.add(t2); //Objekt t2 der ArrayList hinzufügen
sammlung.add(t3); //Objekt t2 der ArrayList hinzufügen

Die ArrayList sammlung hat nun zwei Objekte des Typs Turtle. Wir können die Größe übrigens mit der Methode size() abfragen:

System.out.println(sammlung.size()); // 3

Wir können der ArrayList jederzeit neue Elemente (aber nur vom Typ Turtle) hinzufügen - die Größe der Sammlung passt sich entsprechend an.

Elemente abrufen mit get()

Wie in einem Array sind auch die Elemente in einer ArrayList nach Index-Nummern positioniert. Das erste Element hat den Index 0 und das letzte Element den Index size() - 1.

Mittels der Methode get() wird dasjenige Element zurückgeliefert, das auf der angegebenen Index-Position liegt. Zum Beispiel:

Turtle t4 = sammlung.get(1);

Wir rufen mit sammlung.get(1) das zweite Turtle-Element der Sammlung ab und weisen das zurückgelieferte Objekt der Referenzvariablen t4 zu.

Elemente löschen mit remove()

Um ein Element aus der ArrayList zu löschen, wenden wir die Methode remove()an und übergeben als Argument die Index-Nummer des zu löschenden Elements:

System.out.println(sammlung.size()); //3
sammlung.remove(1);
System.out.println(sammlung.size()); //2

Merke: Wenn ein Element aus der Liste gelöscht wird, rücken alle Elemente, die diesem folgen, um eine Index-Position nach vorn.

Elemente in einer Schleife durchlaufen

Dadurch, dass wir typgleiche Objekte in einer Sammlung zusammenfassen, können wir sie sehr einfach in einer Schleife durchlaufen. Eine foreach-Schleifebietet sich bei einer ArrayList an:

for(Turtle sV : sammlung){
    System.out.println(sV);
}

Wir haben hier nur einige der wichtigsten ArrayList-Methoden vorgestellt. Mehr nützliche Methoden zur Verwaltung einer ArrayList können Sie in der Java-Dokumentation nachlesen.

Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen