Home > Informatik > Einführung in die OOP > 7. ArrayList, Teil 1> 7.4 Weitere wichtige Methoden

7.4 Weitere wichtige Methoden

Teil 1 - Teil 2 - Teil 3 - Teil 4 - Teil 5 - Teil 6 - Teil 7

7.4.1 size()

Die Methode size() liefert die Anzahl der tatsächlich vorhandenen Elemente der Liste zurück. Dieser Wert kann durchaus kleiner sein als die Kapazität (length) der Liste.

Nach dem Hinzufügen des 11. Elements hatte wortliste eine Größe (size) von 11, aber eine Kapazität (length) von 15, und nach dem Hinzufügen sechs weiterer Elemente war die Kapazität um den Faktor 1,5 auf 22 gewachsen, die Größe, also der von size() zurückgelieferte Wert, war aber 17.

Codebeispiel
    public void sizeDemo()
    {
       System.out.print("Die ArrayList hat eine Größe von ");
       int groesse = wortliste.size();
       System.out.println(groesse);
    }

7.4.2 get()

Die Methode get() liefert das Objekt zurück, das sich an der Position index in der Liste befindet.

Codebeispiel
    // neu erzeugte ArrayList nach Hinzufügen von 8 Elementen
    // length = 10, size = 8

    public void getDemo(int index)
    {
       System.out.print("Das Wort an Position " + index + " ist: ");
       String wort = wortliste.get(index);
       System.out.println(wort);
    }

    public void test()
    {
       getDemo(10);
    }

Der Aufruf get(9) liefert eine IndexOutOfBoundsException. BlueJ und IntelliJ melden dann: "Index 9 out of bounds for length 8".

Entscheidend ist nicht die interne Kapazität (hier 10) des zugrunde liegenden Arrays, sondern die aktuelle Größe der Liste (hier 8), also die Zahl der tatsächlich gespeicherten Elemente.

Die interne Kapazität ist für Benutzer normalerweise nicht sichtbar (Information Hiding); der BlueJ-Objektinspektor zeigt sie jedoch an. Die Fehlermeldung verwendet zwar das Wort length, gemeint ist hier aber die Anzahl gültiger Elemente, also size.

Einsatz einer for-each-Schleife anstelle von get()

Codebeispiel
   int pos = 0;

    for (String wort : wortliste)
    {
        System.out.print("Das Wort an der Position " + pos + " ist: ");
        System.out.println(wort);
        pos++;
    }

Durch die for-each-Schleife wird in diesem Beispiel ein Zugriff mit dem get()-Befehl überflüssig.

In der lokalen Variable wort steht nacheinander jedes Element von wortliste und kann dann weiterverarbeitet werden.

Vorteile der for-each-Schleife
  1. Die Schleife startet automatisch beim ersten Element (index = 0).
  2. Sie endet automatisch nach dem letzten Element (index = size-1).
  3. Es ist keine Laufvariable und kein Index notwendig.

Merke:

Die for-each-Schleife

Die for-each-Schleife ist die einfachste Möglichkeit, alle Elemente einer ArrayList der Reihe nach zu verarbeiten, wenn die genaue Position der Elemente keine Rolle spielt und auf den Index nicht zugegriffen werden muss.

7.4.3 set()

Mit dieser Methode kann man ein bestimmtes Element der Liste durch ein anderes ersetzen bzw. überschreiben. Die rechts stehenden Elemente rücken nicht weiter nach rechts, und die Größe (size) der Liste bleibt unverändert.

Codebeispiel 1:
wortliste.add("Apfel");
wortliste.add("Birne");
wortliste.add("Orange");
wortliste.set(1, "Banane");

Das Element "Birne" an Position 1 wird durch das neue Element "Banane" ersetzt.

Codebeispiel 2:
for (int i = 0; i < wortliste.size(); i++)
{
    if (wortliste.get(i).equals("Ornage"))
    {
        wortliste.set(i, "Orange");
    }
}

Hier wird der set()-Befehl genutzt, um die Liste zu durchsuchen und das falsch geschriebene Wort "Ornage" durch "Orange" zu ersetzen.

Eine for-each-Schleife ist dafür ungeeignet, weil man darin keinen Index hat und daher den Befehl set(i, "Orange") nicht verwenden kann.

7.4.4 remove()

In der Klasse ArrayList existieren zwei unterschiedliche remove()-Methoden, die sich in ihrer Bedeutung deutlich unterscheiden.

1. remove(int index)

Die Signatur dieser Methode lautet:

public E remove(int index)

Die Methode entfernt das Element, das sich an der angegebenen Position befindet. Die rechts neben diesem Element stehenden Objekte rücken dann um je eine Position nach links auf und die Größe (size) der Liste wird um 1 verringert. Das entfernte Element kann als Rückgabewert zurückgeliefert werden, wie das folgende Codebeispiel zeigt.

Codebeispiel 1:
ArrayList wortliste = new ArrayList<>();

wortliste.add("Apfel");
wortliste.add("Birne");
wortliste.add("Orange");

String entfernt = wortliste.remove(1);

Anmerkung: remove(1) ist in diesem Beispiel unproblematisch. Würde die Liste aber int-Zahlen als Elemente enthalten, gäbe es ein Problem: Es würde nicht die Zahl 1 entfernt, sondern die Zahl, die sich an Position 1 befindet.

Die Methode remove(int index) kann aber auch ganz einfach wie eine normale manipulierende Methode aufgerufen werden, also ohne Rückgabewert.

Codebeispiel 2:
ArrayList wortliste = new ArrayList<>();

wortliste.add("Apfel");
wortliste.add("Birne");
wortliste.add("Orange");

wortliste.remove(1);
Fazit:

Die Methode remove(int index) entfernt das Element an der Position index und gibt dieses Element anschließend zurück. Der Rückgabewert kann in einer Variablen gespeichert werden (Codebeispiel 1), muss aber nicht verwendet werden. Java erlaubt es, den Rückgabewert einer Methode zu ignorieren (Codebeispiel 2). In diesem Fall wird das Element zwar aus der Liste entfernt, das entfernte Objekt geht aber für den weiteren Programmablauf verloren.

2. remove(Object o)

Die Signatur dieser Methode ist:

public boolean remove(Object o)

Diese Methode entfernt das erste Element aus der ArrayList, das als "gleich" zu o erkannt wird. Der Vergleich erfolgt über die Methode equals().

Wenn ein passendes Objekt gefunden wurde, liefert die Methode true zurück, ansonsten false.

Codebeispiel:
boolean erfolg = wortliste.remove("Apfel");
wortliste.remove("Birne");

Auch hier sind beide Varianten erlaubt, einmal die Rückgabe eines Wahrheitswerts an eine boolean-Variable, und einmal der einfache Aufruf ohne Rückgabe von Werten.

Seitenanfang -
Weiter mit noch mehr Methoden ...