prev up next

Previous: Spielbaum Up: Abstrakte Datentypen Next: Hashing

Java Collections Framework

Viele der in diesem Kapitel vorgestellten Abstrakten Datentypen werden von der Sprache Java in ähnlicher Form angeboten. Es handelt sich dabei um Interfaces und dazu passende Implementationen, die im Java Collection Framework zusammengefasst sind.

Das Interface Collection verwaltet eine Sammlung von (nicht notwendigerweise verschiedenen) Objekten. Zum Testen auf inhaltliche Gleichheit muss die Object-Methode equals vom Anwender geeignet überschrieben werden. Folgende Methoden existieren (unter anderem):

boolean  add(Object o);      // fuegt Objekt o hinzu
boolean  contains(Object o); // testet, ob es Objekt x gibt 
                             // mit x.equals(o)
boolean  remove(Object o);   // entfernt ein Objekt x
                             // mit x.equals(o)
boolean  isEmpty();          // testet, ob Collection leer
Iterator iterator();         // liefert einen Iterator

Ein Iterator ist ein Objekt, welches das Durchlaufen aller Objekte einer Collection erlaubt mithilfe seiner Methoden

boolean hasNext();           // liefert true, falls noch Objekte da
Object next();               // liefert naechstes Objekt
void remove();               // entfernt das Objekt, welches als
                             // letztes mit next() geliefert wurde

Vom Interface Collection wird das Interface Set abgeleitet, welches eine Menge ohne Duplikate verwaltet. Set verfügt nur über die geerbten, aber über keine zusätzlichen Methoden.

Vom Interface Collection wird außerdem abgeleitet das Interface List, welches eine sequentiell angeordnetete Sammlung von Objekten verwaltet. Zu den geerbten Methoden kommen (unter anderem) hinzu

boolean add(int i, Object o); // fuegt Objekt o bei Position i ein
Object  get(int i );          // liefert Objekt an Position i
int indexOf(Object o);        // liefert Position von Objekt o

Vom Interface Set wird abgeleitet das Interface SortedSet, welches auf der zu verwaltenden Menge eine Ordnung verlangt, d.h. die Objekte sollten entweder das Interface Comparable implementieren oder über die compare-Methode eines Comparator-Objektes verglichen werden können (siehe weiter unten).

Die im Interface vorhandene Methode listIterator() weist eine über den üblichen Iterator hinausgehende Funktionalität auf: mit hasPrevious() und previous() kann die Liste auch rückwärts durchlaufen werden.

In den folgenden Beispielen werden auch die in Java 5.0 eingeführten Generischen Klassen verwendet: Beispielsweise wird durch

Set <Character> s = new TreeSet <Character> ();
ein TreeSet instantiiert, welcher ausschließlich Objekte vom Typ Character aufnimmt.

Die Klasse TreeSet implementiert das Interface SortedSet. Hier werden die Objekte in einer Baumstruktur verwaltet. Source: TreeSetTest.java     JavaDoc: TreeSetTest.html     Applet:

Die Klasse LinkedList implementiert das Interface List. Hier werden die Objekte in einer doppelt verzeigerten Liste verwaltet. Source: LinkedListTest.java     JavaDoc: LinkedListTest.html     Applet:

Für Objekte aus dem Collection Framework gibt es einige nützliche statische Methoden, die in der Klasse java.util.Collections zusammengefasst sind. Beispielsweise existieren die Methoden

public static void sort (List l);
public static void sort (List l, Comparator c);
welche die Objekte der Liste l sortieren. Hierzu müssen sie entweder das Comparable-Interface implementieren, oder der Anwender implementiert zuvor das Interface Comparator durch Bereitstellung der Methode
int compare(Object o1, Object o2);
mit der zwei Objekte verglichen werden können.

Source: StudentComparator.java     Source: StudentComparatorTest.java     JavaDoc: StudentComparatorTest.html     Applet:


prev up next
Previous: Spielbaum Up: Abstrakte Datentypen Next: Hashing