Java EnumSet: Aanmaak, operaties en prestatietips
Java EnumSet
Deze handleiding leidt je door het aanmaken, manipuleren en optimaliseren van Java EnumSet-collecties met hands-on codevoorbeelden en best-practice inzichten.
De EnumSet-klasse is een high-performance set-implementatie ontworpen exclusief voor enum-types. Het implementeert de java.util.Set-interface en erft ook Cloneable en Serializable, wat het zowel veelzijdig als efficiënt maakt.
Voordat je duikt in EnumSet, zorg dat je comfortabel bent met Java enums, aangezien de set strak gekoppeld is aan een enkel enum-type.

Een EnumSet aanmaken
In tegenstelling tot andere set-implementaties, blootlegt EnumSet geen publieke constructors. In plaats daarvan gebruik je de statische factory-methodes om een set te bouwen.
1. Met EnumSet.allOf()
De allOf()-methode creëert een set die elke constant van het gespecificeerde enum-type bevat.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); } }
Output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
2. Met EnumSet.noneOf()
Creëert een lege set die alleen waarden van het gespecificeerde enum-type kan bevatten.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.noneOf(Size.class); System.out.println("Lege EnumSet: " + sizes); } }
Output
Lege EnumSet: []
Let op: De resulterende set accepteert alleen Size-constanten omdat het geïnstantieerd werd met Size.class.
3. Met EnumSet.range()
Bouwt een set die alle enum-constanten bevat van een ondergrens tot een bovengrens, inclusief.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); } }
Output
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4. Met EnumSet.of()
Creëert een set die een of meer specifieke enum-constanten bevat.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); } }
Output
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Algemene operaties op EnumSet
Elementen toevoegen
add()– voegt een enkele enum-constant toe.addAll()– voegt een andere collectie van hetzelfde enum-type samen.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> all = EnumSet.allOf(Size.class); EnumSet<Size> selected = EnumSet.noneOf(Size.class); selected.add(Size.MEDIUM); System.out.println("Na add(): " + selected); selected.addAll(all); System.out.println("Na addAll(): " + selected); } }
Output
Na add(): [MEDIUM] Na addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
Let op dat addAll() elke Collection<Size> accepteert, inclusief lijsten of sets, mits ze hetzelfde enum-type bevatten.
Elementen itereren
Gebruik een Iterator om de set te doorlopen:
import java.util.EnumSet; import java.util.Iterator; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); Iterator<Size> it = sizes.iterator(); System.out.print("EnumSet: "); while (it.hasNext()) { System.out.print(it.next() + ", "); } } }
Output
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Elementen verwijderen
remove()– verwijdert een specifieke constant.removeAll()– leegt de set wanneer zichzelf doorgegeven wordt.
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); boolean removed = sizes.remove(Size.MEDIUM); System.out.println("Is MEDIUM verwijderd? " + removed); boolean cleared = sizes.removeAll(sizes); System.out.println("Zijn alle elementen verwijderd? " + cleared); } }
Output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Is MEDIUM verwijderd? true Zijn alle elementen verwijderd? true
Aanvullende helper-methoden
| Methode | Beschrijving |
|---|---|
copyOf() | Creëert een nieuwe EnumSet met dezelfde elementen. |
contains() | Controleert of een specifieke constant aanwezig is. |
isEmpty() | Retourneert true als de set geen elementen heeft. |
size() | Retourneert het aantal elementen. |
clear() | Verwijdert alle elementen. |
Cloneable en Serializable
EnumSet implementeert Cloneable, wat je in staat stelt een shallow copy aan te maken via clone(). Het implementeert ook Serializable, wat veilige transmissie over netwerken of persistentie naar schijf toestaat.
Waarom EnumSet gebruiken?
Omdat EnumSet de waarden opslaat als een bit-vector, voeren operaties zoals add, remove en contains uit in constante tijd met minimaal geheugenoverhead. De JVM kent al de exacte set mogelijke constanten voor een gegeven enum, wat EnumSet ver meer efficiënt maakt dan generieke implementaties zoals HashSet of TreeSet.
In de praktijk, kies EnumSet wanneer je een high-performance set van enum-waarden nodig hebt.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Enums meesteren: complete gids tot Enums & Enum klassen
- Java Enum constructors uitgelegd met praktisch voorbeeld
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid