Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java EnumSet : Création, Opérations et Astuces de Performance

Java EnumSet

Ce guide vous accompagne dans la création, la manipulation et l'optimisation des collections Java EnumSet avec des exemples de code pratiques et des insights sur les bonnes pratiques.

La classe EnumSet est une implémentation de set haute performance conçue exclusivement pour les types enum. Elle implémente l'interface java.util.Set et hérite aussi de Cloneable et Serializable, la rendant à la fois versatile et efficace.

Avant de plonger dans EnumSet, assurez-vous d'être à l'aise avec les enums Java, car le set est étroitement couplé à un seul type enum.


Création d'un EnumSet

Contrairement aux autres implémentations de set, EnumSet n'expose pas de constructeurs publics. À la place, vous utilisez ses méthodes factory statiques pour construire un set.

1. Utilisation de EnumSet.allOf()

La méthode allOf() crée un set contenant chaque constante du type enum spécifié.

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);
    }
}

Sortie

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

2. Utilisation de EnumSet.noneOf()

Crée un set vide qui ne peut contenir que des valeurs du type enum spécifié.

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("EnumSet Vide: " + sizes);
    }
}

Sortie

EnumSet Vide: []

Note : Le set résultant n'accepte que des constantes Size car il a été instancié avec Size.class.

3. Utilisation de EnumSet.range()

Construit un set contenant toutes les constantes d'enum d'une borne inférieure à une borne supérieure, inclusives.

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);
    }
}

Sortie

EnumSet: [MEDIUM, LARGE, EXTRALARGE]

4. Utilisation de EnumSet.of()

Crée un set contenant une ou plusieurs constantes enum spécifiques.

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);
    }
}

Sortie

EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]

Opérations Courantes sur EnumSet

Ajout d'Éléments

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("Après add(): " + selected);
        selected.addAll(all);
        System.out.println("Après addAll(): " + selected);
    }
}

Sortie

Après add(): [MEDIUM] Après addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]

Notez que addAll() accepte tout Collection<Size>, incluant listes ou sets, tant qu'ils contiennent le même type enum.

Itération sur les Éléments

Utilisez un Iterator pour parcourir le set :

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() + ", ");
        }
    }
}

Sortie

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,

Suppression d'Éléments

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("MEDIUM est-il supprimé? " + removed);
        boolean cleared = sizes.removeAll(sizes);
        System.out.println("Tous les éléments sont-ils supprimés? " + cleared);
    }
}

Sortie

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] MEDIUM est-il supprimé? true Tous les éléments sont-ils supprimés? true

Méthodes Utilitaires Supplémentaires

MéthodeDescription
copyOf()Crée un nouvel EnumSet contenant les mêmes éléments.
contains()Vérifie si une constante spécifique est présente.
isEmpty()Retourne true si le set n'a pas d'éléments.
size()Retourne le nombre d'éléments.
clear()Supprime tous les éléments.

Cloneable et Serializable

EnumSet implémente Cloneable, vous permettant de créer une copie superficielle via clone(). Il implémente aussi Serializable, permettant une transmission sûre sur réseau ou persistance sur disque.

Pourquoi Utiliser EnumSet?

Parce que EnumSet stocke ses valeurs comme un vecteur de bits, les opérations comme add, remove et contains s'exécutent en temps constant avec une surcharge mémoire minimale. La JVM connaît déjà l'ensemble exact des constantes possibles pour un enum donné, ce qui rend EnumSet bien plus efficace que des implémentations génériques comme HashSet ou TreeSet.

En pratique, choisissez EnumSet chaque fois que vous avez besoin d'un set haute performance de valeurs enum.

Java

  1. Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
  2. Commentaires Java : Types, utilisation et bonnes pratiques
  3. Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
  4. Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
  5. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  6. Maîtriser les enums Java : guide complet des enums et classes enum
  7. Constructeurs d'enum Java expliqués avec exemple pratique
  8. Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
  9. Annotations Java expliquées : types, placement et exemples pratiques