Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


16.2.2

Collection Interfaces


In diesem Abschnitt werden die unterschiedlichen Interfaces kurz beschrieben, die das Collection-Framework zur Verfügung stellt. Das JDK 1.2 enthält für viele Interfaces mehrere Implementierungen. Die Methoden, die ein Interface zum Manipulieren der Datenelemente zur Verfügung stellt, sind einfach verständlich und können der elektronischen Referenz entnommen werden.

Klassen, die SortedSet und SortedMap implementieren, bieten eine Sortierung für ihre Elemente an. Da prinzipiell beliebige Objekte in einer Kollektion gespeichert werden können, muss ein Sortierungskriterium bereitgestellt werden. Zu diesem Zweck werden die Interfaces Comparable und Comparator benutzt. Objekte, die in einer sortierten Kollektion gespeichert werden, müssen entweder das Interface Comparable implementieren oder die Kollektion muss einmalig mit einer Implementierung von Comparator initialisiert werden.

Das Interface Comparable definiert eine Methode:
  public int compareTo(Object o)
Diese Methode vergleicht das übergebene Exemplar mit dem Exemplar, in dem der Aufruf stattfindet. Der Rückgabewert der Methode sollte folgende Werte annehmen: Eine negative Zahl, falls das aufgerufene Objekte kleiner ist, 0, falls die Objekte gleich sind und eine positive Zahl, falls das aufgerufene Objekte größer ist.

Da die Implementierung eines Interface nur möglich ist, wenn man Zugriff auf den Quellcode hat, wird im JDK zusätzlich das Interface Comparator definiert. Comparator definiert die Methode
  public int compare(Object o1, Object o2)
Diese Methode sollte prinzipiell dasselbe Verhalten wie compareTo() bei Comparable zeigen: Negativer Rückgabewert, wenn o1 im Sinne der Ordnung kleiner ist als o2, 0 bei Gleichheit und positiver Rückgabewert, wenn o1 > o2. Ein Comparator kann z. B. implementiert werden, wenn man keinen Zugriff auf den Quellcode von Klassen hat, sie aber dennoch in sortierten Kollektionen speichern möchte. Hierzu muss man eine Klasse definieren, die das Interface Comparator implementiert und in compareTo() die Vergleichsregeln implementieren. Die Initialisierung einer konkreten Kollektion mit einem Comparator erfolgt bei den vordefinierten Klassen mit dem Konstruktor:
  TreeMap tm = new TreeMap(new PersonComparator());
Im obigen Codeausschnitt wird eine TreeMap (eine Implementierung von SortedMap) erzeugt und mit einem Comparator initialisiert.

Für Implementierungen des Interface Collection gibt es eine Möglichkeit, alle Elemente nacheinander zu durchlaufen. Diese Funktion wird vom Interface Iterator bereitgestellt. Iterator hat prinzipiell dieselbe Aufgabe wie die Klasse Enumeration, mit dem Unterschied, dass Elemente beim Durchlaufen auch gelöscht werden können. Hierfür stellt Iterator die Methode remove() zur Verfügung. Über die Methode iterator() kann ein Iterator für eine Kollektion ermittelt werden. iterator() ist im Interface Collection definiert. Bei Kollektionen, die nicht direkt das Interface Collection implementieren, wie z. B. die Klasse TreeMap, kann man über die Methode values() ein Collection-Exemplar ermitteln, das Zugriff auf die Original-Elemente bietet. Folgendes Beispiel zeigt, wie ein Iterator von der Klasse TreeMap ermittelt und bearbeitet wird:
  TreeMap tm = new TreeMap();
  // Elemente der Kollektion hinzufügen
  // ...
  Collection col = tm.values();
  Iterator iter = col.iterator();
  // Elemente durchlaufen
  while(iter.hasNext()) {
    Object o = iter.next();
    // hier Bearbeiten der Elemente
    // ...
  }
Die Methode values() bietet die Möglichkeit, auf eine Map aus der Sicht einer Collection zuzugreifen. Analog zu values() sind in den Klassen des Java Collection-Frameworks weitere Methoden definiert, die unterschiedliche Sichten auf die vorhandenen Datenstrukuren ermöglichen. Diese Methoden können im Einzelnen in der elektronischen Referenz nachgeschlagen werden.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.