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 geordnetete 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 boolean 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> = 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: PersonComparator.java Source: PersonComparatorTest.java JavaDoc: PersonComparatorTest.html Applet: