prev up next

Previous: Java Collection Framework Up: Java Collection Framework Next: Map

Collection

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 zuletzt geliefertes Objekt

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 das Interface SortedSet abgeleitet, 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.

Für das Interface Set gibt es die Implementation HashSet(), welche die bereits bekannten Methoden add, contains und remove über eine Hashorganisation löst. Der Konstruktor erlaubt die (optionale) Angabe einer initialen Kapazität. Hashing in Java basiert auf der Methode hashCode(), mit der beliebige Objekte eine ganze Zahl zugeordnet bekommen mit der Eigenschaft, dass diese innerhalb eines Programmlaufs bei mehrmaligem Aufrufen für dasselbe Objekt identisch sein muss und dass die hashCodes für zwei Objekte, die bzgl der equals-Methode gleich sind, übereinstimmen müssen.

Die Klasse TreeSet implementiert das Interface SortedSet. Hier werden die Objekte in einer Baumstruktur verwaltet.

Die Klasse LinkedList implementiert das Interface List. Hier werden die Objekte in einer doppelt verzeigerten Liste verwaltet.

Die Klasse Stack (entspricht dem Keller) verwaltet eine Menge von Objekten und erweitert das Interface Collection unter anderem mit den Methoden

Object push(Object x);  // legt ein Objekt oben auf den Stack
Object pop();           // entfernt das oberste Objekt vom Stack
Object peek();          // liefert das oberste Objekt vom Stack
boolean empty();        // testet, ob der Stack leer ist

Die Klasse PriorityQueue (entspricht dem Heap) verwaltet eine Menge von vergleichbaren Objekten und erweitert mit ihrer Implementation das Interface Collection unter anderem mit den Methoden

Object peek();          // liefert das billigste Objekt
Object poll();          // liefert und entfernt das billigste Objekt

Generische Klassen erlauben die Einschränkung des Wertebereichs: Beispielsweise wird durch

Set <Character> s = new HashSet <Character> ();
for (Character c : s) { // bearbeite c }
ein HashSet instantiiert, welcher ausschließlich Objekte vom Typ Character aufnimmt. Mit einer for-each-Schleife können alle Objekte des Sets durchlaufen werden.


prev up next
Previous: Java Collection Framework Up: Java Collection Framework Next: Map