EMZETT.
Login

Collections

Kurz: Eine Sammlung vorgefertigter, wiederverwendbarer Datenstrukturen (Listen, Mengen, Zuordnungen), die eine Sprache als Standardbibliothek mitbringt, statt dass jedes Programm sie selbst neu implementieren muss.

Genauer: Zu den Collections gehören typischerweise dynamisch wachsende Listen (z. B. ArrayList, LinkedList), eindeutige Mengen (HashSet, TreeSet) und Schlüssel-Wert-Zuordnungen (Maps, z. B. LinkedHashMap). Über ein einheitliches Interface (siehe Iterator) lassen sich alle diese Strukturen auf ähnliche Weise durchlaufen, unabhängig von ihrer konkreten internen Implementierung.

Im Detail

Der Grundgedanke hinter einem Collections-Framework: Fast jedes Programm braucht Listen, eindeutige Mengen und Schlüssel-Wert-Zuordnungen — anstatt dass jede Codebasis das immer wieder neu (und mit unterschiedlicher Qualität und Bugs) implementiert, stellt die Standardbibliothek einer Sprache gut getestete, performante Referenzimplementierungen bereit.

Die drei Hauptkategorien im Überblick:

Liste     - geordnet, Duplikate erlaubt, Zugriff per Index      -> [10, 20, 20, 30]
Menge     - ungeordnet ODER sortiert, KEINE Duplikate            -> {10, 20, 30}
Map       - Schlüssel -> Wert-Zuordnung, Schlüssel eindeutig     -> {"a": 1, "b": 2}

Innerhalb jeder Kategorie gibt es meist mehrere konkrete Implementierungen mit unterschiedlichen Stärken — z. B. bei Listen die Wahl zwischen ArrayList (schneller wahlfreier Zugriff per Index, aber langsames Einfügen in der Mitte) und LinkedList (schnelles Einfügen/Löschen, aber langsamer Zugriff per Index). Welche Implementierung die richtige ist, hängt davon ab, welche Operation im konkreten Anwendungsfall am häufigsten vorkommt — siehe die jeweiligen Einzelartikel für die genauen Kompromisse.

Der entscheidende Vorteil eines einheitlichen Collections-Frameworks ist die Austauschbarkeit: Weil alle Collection-Typen dasselbe grundlegende Interface implementieren (mit Methoden wie “hinzufügen”, “entfernen”, “durchlaufen”), kann Code, der gegen dieses Interface geschrieben ist, ohne Änderung mit jeder konkreten Implementierung arbeiten:

funktion gibAlleAus(Collection sammlung):
    für jedes element in sammlung:
        drucke(element)
// funktioniert identisch, egal ob "sammlung" eine ArrayList, ein HashSet oder was anderes ist

Das erlaubt, die konkrete Implementierung später auszutauschen (z. B. von einer einfachen Liste zu einer performanteren Struktur zu wechseln), ohne den Code, der die Collection nur liest, anpassen zu müssen — ein direktes Beispiel für das Prinzip der Abstraktion.

Siehe auch: Data Structures, List, Set, Iterator