🗺️ 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).
Geordnete Reihenfolge, schneller Indexzugriff via get(i) in O(1).
Keine Duplikate. HashSet nutzt Hash-Buckets für O(1) Suche.
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.
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
Gib bei Getter-Methoden niemals interne veränderbare Listen direkt zurück! Verwende List.copyOf(products) oder Collections.unmodifiableList(products) zur Wahrung der Datenkapselung.