Weiter zum Inhalt

08.03 Die List-Schnittstelle

Aus dem letzten Kapitel kennen Sie bereits die Collection-Schnittstelle. Das Interface java.util.List (nachfolgend als List oder Liste bezeichnet, und nicht zu verwechseln mit der Klasse java.awt.List) erbt von Collection und spezifiziert java.util.Collection somit genauer.

Allgemeines zu Listen

Ebenso wie die Collection-Schnittstelle, enthält auch eine List mehrere Objekte eines bestimmten Datentyps. Wird dieser Datentyp nicht über Generics definiert, sind auch unterschiedliche Datentypen in einer Liste möglich. Dieser Zustand sollte allerdings nach Möglichkeit vermieden werden. Die Art, wie die Elemente in einer List “liegen”, ist genauer spezifiziert als in der Collection:

  • Eine Liste ist sortiert. Das bedeutet, dass jedes Objekt in einer Liste über einen Index (wie bei einem Array) angesprochen werden kann. Dies funktioniert bspw. mit der Methode list.get(index);. Durch die Sortierung ist auch sichergestellt, dass die Liste zur Laufzeit nicht einfach die Position, also den Index, der Objekte verändern darf/kann.
  • Doppelte Einträge sind erlaubt. So können mehrere identische Objekte (o1.equals(o2);) in eine Liste eingefügt werden. Falls die Liste das Hinzufügen von null gestattet, können typischerweise auch mehrere null-Objekte hinzugefügt werden. Natürlich ist es nicht auszuschließen, dass eine List das Einfügen von doppelten Einträgen durch Werfen einer Exception unterbindet.
  • Ebenso wie Arrays, fangen Listen bei 0 an zu zählen. Der erste Index ist also 0, der Zweite 1, der Dritte 2, …
  • Zusätzlich zum Iterator im Collection-Interface, stellt eine List auch einen ListIterator zur Verfügung. Ein ListIterator erlaubt es Objekte hinzuzufügen und zu ersetzen, und stellt eine Funktionalität bereit, um bidirektional auf ihn zuzugreifen.

Ansonsten zählt natürlich alles, was für eine Collection auch zählt. Somit ist eine List am ehesten mit einem dynamischen Array zu vergleichen.

Methoden einer List (zusätzlich zu den Methoden von java.util.Collection)

  • add(int index, E element) – fügt das Objekt an der spezifischen Stelle in der Liste ein. Das Element, das sich zuvor an dieser Stelle befand, und alle nachfolgenden Elemente, werden um jeweils eine Stelle weiter nach rechts verschoben (aus 3 wird 4, aus 4 wird 5, aus 5 wird 6, …)
  • addAll(int index, Collection<? extends E> c) – fügt die Collection c an der spezifizierten Stelle in die Liste ein. Das Element an dieser Stelle und alle darauffolgenden Elemente, werden um die Größe von c nach rechts verschoben.
  • get(int index) – gibt das Objekt an Stelle index zurück.
  • indexOf(Object o) – gibt die Stelle zurück, an der sich das gegebene Objekt befindet. Falls sich das Objekt nicht in der Liste befindet, gibt diese Methode -1 zurück.
  • lastIndexOf(Object o) – so wie indexOf(Object o), nur, dass die Stelle des letzten Objekts, das gleich o ist, zurückgegeben wird.
  • listIterator() – gibt einen ListIterator für diese Liste zurück.
  • listIterator(int index) – gibt einen ListIterator für diese Liste zurück, der an der Stelle index beginnt.
  • remove(int index) – entfernt das Objekt an der Stelle index von der List.
  • set(int index, E element) – überschreibt das Objekt an der Stelle index mit dem Objekt element.
  • subList(int fromIndex, int toIndex) – gibt eine Liste mit den Elementen in der Liste fromIndex (inklusiv) bis toIndex (exklusiv) zurück.

Verwendung

Java bietet bereits mehrere Implementierungen einer List. Die Wichtigsten werden im Kapitel 08.06 Implementierungen von List vorgestellt. An dieser Stelle folgt noch ein kleines Beispiel mit einer java.util.ArrayList, die Sie im Java Blog Buch bereits mehrmals verwendet haben.

List<String> myList = new ArrayList<String>();
myList.add("String eins");
myList.add("String zwei");
myList.add("String drei");
for (String str : myList) {
  System.out.println(str);
}
List<String> myList2 = new ArrayList<String>();
myList2.addAll(myList);
myList2.remove("String eins");
myList2.remove(1);
for (String str : myList2) {
  System.out.println(str);
}
System.out.println(myList.get(0));

Kommentar verfassen

Dein E-Mail wird nicht veröffentlicht oder weitergegeben. Pflichtfelder sind mit * markiert.