Java Tutorial #16

Objektsammlungen in Java verwenden

Lernen Sie in diesem Kapitel, wie Sie eine Sammlung von Objekten erstellen können. Der Vorteil einer Objektsammlung ist es nämlich, dass wir alle Objekte der Sammlung gemeinsam verwalten könnnen. Typische Sammlungen sind das Array und die ArrayList.

Stefan 03.12.2018

Infos zum Artikel

Kategorie Java
Autor Stefan
Datum 03.12.2018

Thema in Kurzform

  • Array von Objekttypen erstellen:
    Turtle[] sammlung = new Turtle[6];
    
  • ArrayList erstellen:
    ArrayList<Turtle> sammlung = new ArrayList<>();
    

Kapitelübersicht

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 Objektsammlungen

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 ArrayList importieren. 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 Klassendefiniton stehen, 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 entspreched 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 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-Schleife bietet 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.

Übungen

einfach

Was ist der Unterschied zwischen einem Array und einer ArrayList?

Lösung ein-/ausblenden

mittel

Erzeugen Sie eine ArrayList von Strings namens farben. In die Liste tragen Sie beispielhaft vier Farben ein und geben Sie anschließend in einer Schleife auf der Java-Konsole aus.

Lösung ein-/ausblenden

schwer

Was gibt der folgende Code auf der Konsole aus?

import java.util.ArrayList;

public class ArrayListExample {

    public static void main(String[] args) {

        ArrayList<String> sammlung = new ArrayList<>();
        sammlung.add("APPLE");
        sammlung.add("CHERRY");
        sammlung.add("PINEAPPLE");
        sammlung.add("BLUEBERRY");

        if(sammlung.remove(2)){
          sammlung.remove("APPLE");
        }

        System.out.println(sammlung);

    }
}

A. [APPLE, CHERRY, PINEAPPLE]
B. [APPLE, CHERRY]
C. [APPLE, CHERRY, PINEAPPLE, BLUEBERRY]
D. [CHERRY, BLUEBERRY]
E. Compiler-Fehler

Lösung ein-/ausblenden

Objekte vergleichen

Was ist der Unterschied zwischen == und equals()?

Vererbung einfach erklärt

Lernen Sie die Grundlagen der Vererbung in Java

toString() Methode

Lernen Sie hier, wie Sie die toString() Methode korrekt einsetzen

FALCONBYTE.NET

Handmade with 🖤️

© 2018, 2019 Stefan E. Heller

Impressum | Datenschutz

facebook programmieren lernen twitter programmieren lernen youtube programmieren lernen