Fortgeschrittenes Java Tag 1: Generics und erweiterte Collections

Ziel dieses Tages

Heute lernst du:

Am Ende wirst du typensicheren Code schreiben und erweiterte Collection-Funktionen effektiv nutzen können.

Schritt 1: Grundlagen von Generics

Generics erlauben es, Klassen oder Methoden mit einem Typparameter <T> zu definieren.


public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Box<String> box = new Box<>();
box.setContent("Hallo");
System.out.println(box.getContent()); // Hallo

Schritt 2: Collections im Detail

Erweiterte Collections umfassen sortierte Sets und Maps sowie Queues mit Priorität.

TreeSet


import java.util.TreeSet;

TreeSet set = new TreeSet<>();
set.add(5);
set.add(3);
set.add(8);

System.out.println(set); // [3, 5, 8] automatisch sortiert

TreeMap


import java.util.TreeMap;

TreeMap scores = new TreeMap<>();
scores.put("Alice", 90);
scores.put("Bob", 85);

System.out.println(scores); // sortiert nach Schlüsseln

PriorityQueue


import java.util.PriorityQueue;

PriorityQueue pq = new PriorityQueue<>();
pq.add(10);
pq.add(5);
pq.add(15);

while(!pq.isEmpty()) {
    System.out.println(pq.poll()); // 5, 10, 15
}

Schritt 3: Eigene Comparatoren

Du kannst Collections mit eigener Logik sortieren.


import java.util.*;

List names = Arrays.asList("Alice", "Bob", "Charlie");

Collections.sort(names, (a, b) -> b.compareTo(a)); // absteigend
System.out.println(names); // [Charlie, Bob, Alice]

Schritt 4: Collections-Utilities

Häufige Methoden:

Übung


import java.util.*;

List<String> names = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie"));
Collections.sort(names);
System.out.println(names);

Map<String, Integer> scores = new TreeMap<>();
scores.put("Alice", 90);
scores.put("Bob", 85);
System.out.println(scores);

Aufgabe

Erstelle eine PriorityQueue mit ganzen Zahlen und gib die Elemente aufsteigend aus.

Schritte:

Beispiel:


import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        pq.add(10);
        pq.add(5);
        pq.add(20);
        pq.add(1);

        while(!pq.isEmpty()) {
            System.out.println(pq.poll());
        }
        // Ausgabe: 1, 5, 10, 20
    }
}