magicmarcy.de | Enums, EnumSet & EnumMap in Java – einfache Helfer mit grosser Wirkung

Enums, EnumSet & EnumMap in Java – einfache Helfer mit grosser Wirkung

Java • 14. November 2025 • Lesezeit: 6 Minuten

Wer mit Java arbeitet, trifft früher oder später auf sogenannte Enums. Für Einsteiger wirken sie anfangs vielleicht etwas seltsam – man könnte ja auch einfach Konstanten mit public static final definieren. Doch Enums bieten viel mehr: sie sind typsicher, leicht erweiterbar und lassen sich hervorragend mit speziellen Sammlungen wie EnumSet und EnumMap kombinieren. In diesem Beitrag zeige ich dir, wie du diese Werkzeuge effektiv einsetzt.

 

Was ist ein Enum?

Ein Enum (Kurzform für „Enumeration“) ist ein eigener Typ, der eine feste Menge von Werten beschreibt. Du kannst dir das vorstellen wie eine Liste aller möglichen Zustände oder Varianten. Ein Beispiel aus der Praxis wäre eine Ampel mit den Zuständen ROT, GELB und GRÜN:

public enum AmpelPhase {
    ROT,
    GELB,
    GRUEN
}

So ein Enum kannst du direkt im Code verwenden:

public class AmpelTest {
    public static void main(String[] args) {
        AmpelPhase phase = AmpelPhase.ROT;

        if (phase == AmpelPhase.ROT) {
            System.out.println("Bitte warten!");
        } else if (phase == AmpelPhase.GRUEN) {
            System.out.println("Fahren erlaubt!");
        }
    }
}

Ausgabe:

Bitte warten!

Der grosse Vorteil: Ein Enum-Wert kann nur einen der definierten Zustände annehmen – etwas anderes ist nicht möglich. Das macht den Code typsicher und schützt vor falschen Werten, die man bei String-Konstanten leicht übersehen könnte.

 

Enums mit eigenen Eigenschaften und Methoden

Ein Enum ist in Wahrheit eine spezielle Klasse. Du kannst ihm also Felder, Konstruktoren und Methoden geben. So lassen sich Werte mit zusätzlichen Informationen anreichern. Ein Beispiel wäre ein Enum für Wochentage mit einem Hinweis, ob es sich um einen Arbeitstag oder ein Wochenende handelt:

public enum Wochentag {
    MONTAG(true),
    DIENSTAG(true),
    MITTWOCH(true),
    DONNERSTAG(true),
    FREITAG(true),
    SAMSTAG(false),
    SONNTAG(false);

    private boolean arbeitstag;

    Wochentag(boolean arbeitstag) {
        this.arbeitstag = arbeitstag;
    }

    public boolean istArbeitstag() {
        return arbeitstag;
    }
}

Und so kannst du das Enum verwenden:

public class WochentagTest {
    public static void main(String[] args) {
        for (Wochentag tag : Wochentag.values()) {
            System.out.println(tag + " ist Arbeitstag: " + tag.istArbeitstag());
        }
    }
}

Ausgabe:

MONTAG ist Arbeitstag: true
DIENSTAG ist Arbeitstag: true
MITTWOCH ist Arbeitstag: true
DONNERSTAG ist Arbeitstag: true
FREITAG ist Arbeitstag: true
SAMSTAG ist Arbeitstag: false
SONNTAG ist Arbeitstag: false

Das ist übersichtlich, klar typisiert und leicht erweiterbar. Wenn du später weitere Informationen hinzufügen willst (z. B. ob der Tag ein offizieller Feiertag ist), kannst du das einfach tun, ohne deinen Code zu brechen.

 

EnumSet – die effiziente Menge für Enums

Wenn du mit Mengen arbeitest, also Sammlungen ohne doppelte Einträge, ist EnumSet die perfekte Wahl für Enums. Ein EnumSet ist extrem performant, weil es intern mit Bitmasken arbeitet. Es kann nur Elemente eines bestimmten Enum-Typs enthalten und ist daher besonders speichersparend.

Hier ein einfaches Beispiel:

import java.util.EnumSet;

public class EnumSetBeispiel {
    public static void main(String[] args) {
        EnumSet<Wochentag> arbeitstage = EnumSet.range(Wochentag.MONTAG, Wochentag.FREITAG);
        EnumSet<Wochentag> wochenende = EnumSet.of(Wochentag.SAMSTAG, Wochentag.SONNTAG);

        System.out.println("Arbeitstage: " + arbeitstage);
        System.out.println("Wochenende: " + wochenende);

        if (arbeitstage.contains(Wochentag.MONTAG)) {
            System.out.println("Montag ist ein Arbeitstag.");
        }
    }
}

Ausgabe:

Arbeitstage: [MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG]
Wochenende: [SAMSTAG, SONNTAG]
Montag ist ein Arbeitstag.

EnumSet kann auch mit Operationen wie add(), remove() oder retainAll() verwendet werden – ganz wie andere Sets. Nur ist es eben viel schneller und sicherer, weil nur gültige Enum-Werte zugelassen sind.

 

EnumMap – die clevere Map für Enums

Eine EnumMap funktioniert ähnlich wie eine normale HashMap, ist aber speziell für Enums optimiert. Sie nutzt intern ein Array statt einer Hash-Struktur, wodurch Zugriffe extrem schnell sind. Auch hier gilt: Der Schlüssel darf nur vom Typ eines bestimmten Enums sein.

import java.util.EnumMap;

public class EnumMapBeispiel {
    public static void main(String[] args) {
        EnumMap<Wochentag, String> beschreibung = new EnumMap<>(Wochentag.class);

        beschreibung.put(Wochentag.MONTAG, "Wochenstart");
        beschreibung.put(Wochentag.FREITAG, "Letzter Arbeitstag");
        beschreibung.put(Wochentag.SONNTAG, "Ruhetag");

        for (Wochentag tag : beschreibung.keySet()) {
            System.out.println(tag + ": " + beschreibung.get(tag));
        }
    }
}

Ausgabe:

MONTAG: Wochenstart
FREITAG: Letzter Arbeitstag
SONNTAG: Ruhetag

Mit EnumMap kannst du also einfach Werte zuordnen, die semantisch zu deinen Enum-Schlüsseln passen – z. B. Beschreibungen, Icons, Farben oder URLs.

 

Ein Praxisbeispiel: Ampelsteuerung mit EnumMap

Zum Abschluss ein kleines, aber praxisnahes Beispiel: Stell dir vor, du willst eine einfache Simulation einer Ampelsteuerung schreiben. Jede Phase hat eine Dauer und eine Aktion. Mit einer EnumMap kannst du das elegant lösen.

import java.util.EnumMap;

public class AmpelSimulation {
    enum Phase {
        ROT, GELB, GRUEN
    }

    public static void main(String[] args) {
        EnumMap<Phase, Integer> dauer = new EnumMap<>(Phase.class);
        dauer.put(Phase.ROT, 5000);
        dauer.put(Phase.GELB, 2000);
        dauer.put(Phase.GRUEN, 4000);

        EnumMap<Phase, String> aktion = new EnumMap<>(Phase.class);
        aktion.put(Phase.ROT, "Stehen bleiben");
        aktion.put(Phase.GELB, "Achtung, gleich geht's weiter");
        aktion.put(Phase.GRUEN, "Fahren!");

        for (Phase phase : Phase.values()) {
            System.out.println("Phase: " + phase);
            System.out.println("Dauer: " + dauer.get(phase) + " ms");
            System.out.println("Aktion: " + aktion.get(phase));
            System.out.println("------------------");
        }
    }
}

Ausgabe:

Phase: ROT
Dauer: 5000 ms
Aktion: Stehen bleiben
------------------
Phase: GELB
Dauer: 2000 ms
Aktion: Achtung, gleich geht's weiter
------------------
Phase: GRUEN
Dauer: 4000 ms
Aktion: Fahren!
------------------

So kannst du eine komplexe Logik sehr übersichtlich abbilden, ohne endlose if- oder switch-Blöcke zu schreiben.

 

Fazit

Enum, EnumSet und EnumMap sind Werkzeuge, die in der täglichen Java-Entwicklung oft unterschätzt werden. Sie helfen dabei, Code lesbarer, sicherer und effizienter zu machen. Enums schaffen Typsicherheit, EnumSet ist perfekt für Mengen von Enum-Werten, und EnumMap ermöglicht schnelle und klare Zuordnungen.

Gerade für Einsteiger lohnt es sich, Enums von Anfang an richtig zu verstehen – sie sind keine „magische“ Ergänzung, sondern eine logische Erweiterung des Typsystems, die dir viel Arbeit abnimmt und deinen Code professioneller wirken lässt.

Wenn du das nächste Mal mehrere Konstanten brauchst oder Zustände modellieren willst, denke an Enums. Sie sind nicht nur eleganter – sie zeigen auch, dass du Java verstanden hast.

Dir hat der Artikel gefallen? Dann spendier mir doch einen Kaffee auf Ko-Fi ☕️ — danke dir! ♥️

Es wurden noch keine Kommentare verfasst, sei der erste!
Über
Avatar

Hi, ich bin Marcel!
Als Fachinformatiker für Anwendungsentwicklung und IHK-geprüfter Ausbilder teile ich auf meinem Blog Grundlagen- und Fortgeschrittenen-Wissen für angehende Entwickler*innen und Interessierte, sowie weitere spannende Themen aus der IT.

Blog Aktivität

Sep
 
 
 
Oct
 
 
 
Nov
 
 
 
 
Mon
Wed
Fri