# Collections Abstrakte Datentypen. Behälter für Daten mit verschiedenen Eigenschaften. Die wichtigsten Intefaces sind `Collection`, `List`, `Set` und `Queue`. --- # Collection Supertyp von `List`, `Set` und `Queue`. Repräsentiert eine Gruppe von Objekten, Elemente genannt. * Es gibt keine direkte Implementation von dem Interface `Collection` sondern nur von seinen Subtypen. * Collections können *sortiert* oder *unsortiert* sein. * Collections können Duplikate zulassen oder verbieten. --- # Set * Mengen sind unsortiert und lassen keine Duplikate zu. Mengen ergänzen das Interface `Collection` um keine Methoden. Der einzige Unterschied zwischen `Collection` und `Set` sind die vorgeschriebenen Implementationen von `add`, `equals` und `hashCode`. Häufig verwendete Implementationen von `Set` sind: `HashSet` und `TreeSet`. --- # List * Listen sind sortiert und lassen Duplikate zu. Das Interface `List` ergänzt 4 weitere Methoden zu dem Interface `Collection`, welche einen indizierten Zugriff auf die Elemente zulassen. Der Index startet, wie bei Arrays, von 0. Die Methoden sind: * ` get(int index)` * `int indexOf(Object o)` * `int lastIndexOf(Object o)` * `boolean remove(int index)` Folgende Implementationen von `List` werden häufig verwendet: `ArrayList` und `LinkedList`. --- # Queue * Queues sind sortiert und erlauben Duplikate. Das Interface `Queue` ist eine `Collection` in der Elemente vor ihrer Bearbeitung abgespeichert werden können. Die meisten Queues operieren dabei nach den FIFO-Prinzip. Das Interface erlaubt 3 Operationen: * Elemente hinzufügen mit `boolean add(E element)` oder `boolean offer(E element)` * Elemente entnehmen mit `E remove()` oder `E poll()` * Das oberste Element zurückgeben ohne es zu entnehmen `E element()` oder `E peek()` Als Implementation wird häufig eine `LinkedList` verwendet. --- # Aufgaben * Wie verhält sich die Methode `boolean add(E element)` und in welchem Interface wird sie zuerst spezifiziert? * Mit welcher Methode können mehrere Elemente einer `Collection` ab einem gegebenen Index in eine `List` eingefügt werden? * Wo ist spezfiziert welche Konstruktoren `Collections`anbieten und warum stehen sie nicht im Interface?