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.