⚡ Lehrpfad 3: Generics, Collections & Modern Streams

Java 10: Collections Framework (List, Set, Map)

Verstehe das Java Collections Framework bis ins Detail: ArrayList vs. LinkedList, HashSet & equals/hashCode-Vertrag sowie moderne Map-Operationen.

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.java (Startercode) 🧪 TestAufgabe.java (Tests) 💡 Musterloesung.java (Lösung) 📖 README.md

🗺️ 1. Die drei Säulen: List, Set & Map

Das Java Collections Framework unterteilt sich in sequentielle Listen (List), mengenbasierte Sammlungen ohne Duplikate (Set) und Schlüssel-Wert-Tabellen (Map).

1. List<T> (ArrayList)

Geordnete Reihenfolge, schneller Indexzugriff via get(i) in O(1).

2. Set<T> (HashSet, TreeSet)

Keine Duplikate. HashSet nutzt Hash-Buckets für O(1) Suche.

3. Map<K, V> (HashMap)

Key-Value Assoziationen mit put(), merge() und computeIfAbsent().

// Modernes Map API:
Map<String, Integer> inventory = new HashMap<>();
inventory.merge("Laptop", 1, Integer::sum); // Zählt atomar hoch!

// Gruppierung mit computeIfAbsent:
Map<String, List<Product>> byCategory = new HashMap<>();
byCategory.computeIfAbsent("Hardware", k -> new ArrayList<>()).add(new Product(...));

🔑 2. Der fundamentale equals() & hashCode() Vertrag

Damit eine HashMap oder ein HashSet ein Objekt wiederfindet, berechnet Java zuerst den Hashcode des Objekts, um den Ziel-Bucket im Speicher zu bestimmen.

🏢 Didaktische Analogie: Das Postfachsystem im Hotel

hashCode(): Die Zimmernummer auf dem Schlüsselanhänger bestimmt sofort, zu welcher Etage und welchem Briefkastenfach (Bucket) der Hotelgast geht.
equals(): Im Fach angekommen, vergleicht der Gast den Namen auf dem Briefumschlag, um den richtigen Brief zu greifen. Stimmt der HashCode nicht, sucht der Gast im falschen Stockwerk!

📑 3. Cheat-Sheet: Collection-Auswahl & Methoden

Interface Implementierung Vorteile & Enterprise Use-Case
List<T> ArrayList<T> Standard für Datenlisten; extrem cache-freundlich
Set<T> HashSet<T> Deduplizierung und O(1) Existenzprüfungen
Set<T> TreeSet<T> Automatisch sortierte Menge (Rot-Schwarz-Baum)
Map<K, V> HashMap<K, V> Schnellster Key-Value Speicher für Caching & Lookups
Map<K, V> LinkedHashMap<K, V> Behält Einfügereihenfolge oder Access-Order (LRU Cache) bei

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.

🎯 Aufgaben & Checkliste in Aufgabe.java

💡 Clean Code Tipp: Unmodifiable Collections

Gib bei Getter-Methoden niemals interne veränderbare Listen direkt zurück! Verwende List.copyOf(products) oder Collections.unmodifiableList(products) zur Wahrung der Datenkapselung.

💻 In Web-IDE öffnen → Weiter zu Java 11: Exceptions & Ressourcen →