Java EnumSet

Dans ce tutoriel, nous allons découvrir la classe Java EnumSet et ses différentes méthodes à l'aide d'exemples.

La EnumSetclasse du framework de collections Java fournit une implémentation d'ensemble des éléments d'une seule énumération.

Avant d'en savoir plus sur EnumSet, assurez-vous de connaître les énumérations Java.

Il implémente l'interface Set.

Créer EnumSet

Afin de créer un ensemble d'énumérations, nous devons d'abord importer le java.util.EnumSetpackage.

Contrairement à d'autres implémentations d'ensemble, l'ensemble enum n'a pas de constructeurs publics. Nous devons utiliser les méthodes prédéfinies pour créer un ensemble d'énumérations.

1. Utilisation de allOf (Size)

La allof()méthode crée un ensemble d'énumérations qui contient toutes les valeurs du type d'énumération spécifié Size. Par exemple,

 import java.util.EnumSet; class Main ( // an enum named Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); ) ) 

Production

 EnumSet: (PETIT, MOYEN, GRAND, EXTRALARGE) 

Notez la déclaration,

 EnumSet sizes = EnumSet.allOf(Size.class); 

Ici, Size.class désigne l'énumération Size que nous avons créée.

2. Utilisation de noneOf (Size)

La noneOf()méthode crée un ensemble d'énumérations vide. Par exemple,

 import java.util.EnumSet; class Main ( // an enum type Size enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using noneOf() EnumSet sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); ) ) 

Production

 EnumSet vide: () 

Ici, nous avons créé une énumération vide nommée tailles.

Remarque : nous ne pouvons insérer que des éléments de type enum Size dans le programme ci-dessus. C'est parce que nous avons créé notre ensemble d'énumérations vide à l'aide de Size enum.

3. Utilisation de la méthode range (e1, e2)

La range()méthode crée un ensemble d'énumérations contenant toutes les valeurs d'une énumération entre e1 et e2, y compris les deux valeurs. Par exemple,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using range() EnumSet sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); ) ) 

Production

 EnumSet: (MOYEN, GRAND, EXTRALARGE) 

4. Utilisation de la méthode ()

La of()méthode crée un ensemble d'énumérations contenant les éléments spécifiés. Par exemple,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Using of() with a single parameter EnumSet sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); ) ) 

Production

 EnumSet1: (MEDIUM) EnumSet2: (SMALL, LARGE) 

Méthodes d'EnumSet

La EnumSetclasse fournit des méthodes qui nous permettent d'exécuter divers éléments sur l'ensemble d'énumérations.

Insérer des éléments dans EnumSet

  • add() - insère les valeurs d'énumération spécifiées dans l'ensemble d'énumérations
  • addAll() insère tous les éléments de la collection spécifiée dans l'ensemble

Par exemple,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes1 = EnumSet.allOf(Size.class); // Creating an EnumSet using noneOf() EnumSet sizes2 = EnumSet.noneOf(Size.class); // Using add method sizes2.add(Size.MEDIUM); System.out.println("EnumSet Using add(): " + sizes2); // Using addAll() method sizes2.addAll(sizes1); System.out.println("EnumSet Using addAll(): " + sizes2); ) ) 

Production

 EnumSet en utilisant add (): (MEDIUM) EnumSet en utilisant addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Dans l'exemple ci-dessus, nous avons utilisé la addAll()méthode pour insérer tous les éléments d'un enum set size1 dans un enum set size2.

Il est également possible d'insérer des éléments provenant d' autres collections telles que ArrayList, LinkedList, etc. à un ensemble enum à l' aide addAll(). Cependant, toutes les collections doivent être du même type enum.

Accéder aux éléments EnumSet

Pour accéder aux éléments d'un ensemble d'énumérations, nous pouvons utiliser la iterator()méthode. Pour utiliser cette méthode, nous devons importer le java.util.Iteratorpackage. Par exemple,

 import java.util.EnumSet; import java.util.Iterator; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); Iterator iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Production

 EnumSet: PETIT, MOYEN, GRAND, EXTRALARGE, 

Remarque :

  • hasNext()renvoie trues'il y a un élément suivant dans l'ensemble d'énumérations
  • next() renvoie l'élément suivant dans l'ensemble d'énumérations

Supprimer les éléments EnumSet

  • remove() - supprime l'élément spécifié de l'ensemble d'énumérations
  • removeAll() - supprime tous les éléments de l'ensemble d'énumérations

Par exemple,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating EnumSet using allOf() EnumSet sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); // Using remove() boolean value1 = sizes.remove(Size.MEDIUM); System.out.println("Is MEDIUM removed? " + value1); // Using removeAll() boolean value2 = sizes.removeAll(sizes); System.out.println("Are all elements removed? " + value2); ) ) 

Production

EnumSet: (PETIT, MOYEN, GRAND, EXTRALARGE) Est-ce que MEDIUM est supprimé? true Tous les éléments sont-ils supprimés? vrai

Autres méthodes

Méthode La description
copyOf() Creates a copy of the EnumSet
contains() Searches the EnumSet for the specified element and returns a boolean result
isEmpty() Checks if the EnumSet is empty
size() Returns the size of the EnumSet
clear() Removes all the elements from the EnumSet

Clonable and Serializable Interfaces

The EnumSet class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumSet class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

The Serializable interface allows classes to be serialized. This means objects of the classes implementing Serializable can be converted into bits or bytes.

Why EnumSet?

Le EnumSetfournit un moyen efficace de stocker les valeurs d'énumération que d'autres implémentations d'ensemble (comme HashSet, TreeSet).

Un ensemble d'énumérations stocke uniquement les valeurs d'énumération d'une énumération spécifique. Par conséquent, la JVM connaît déjà toutes les valeurs possibles de l'ensemble.

C'est la raison pour laquelle les ensembles d'énumérations sont implémentés en interne sous la forme d'une séquence de bits. Bits spécifie si les éléments sont présents ou non dans l'ensemble d'énumérations.

Le bit d'un élément correspondant est activé si cet élément est présent dans l'ensemble.

Articles intéressants...