English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,我们将借助示例学习Java EnumSet类及其各种方法。
Java集合框架的EnumSet类提供了单个枚举的元素的集合实现。
在学习EnumSet之前,请确保了解Java Enums.
它实现Set接口.
为了创建一个枚举集,我们必须首先导入java.util.EnumSet包。
与其他集合实现不同,枚举集合没有公共构造函数。我们必须使用预定义的方法来创建一个枚举集。
allof()方法创建一个枚举集,其中包含指定枚举类型Size的所有值。 例如,
import java.util.EnumSet; class Main { // 一个名为Size的枚举 enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Creare un EnumSet utilizzando allOf() EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); } }
Risultato di output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
注意声明,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
在这里,Size.class表示我们创建的Size枚举。
noneOf()方法创建一个空的枚举集。例如,
import java.util.EnumSet; class Main { // 一个名为Size的枚举 enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // 使用noneOf()创建一个EnumSet EnumSet<Size> sizes = EnumSet.noneOf(Size.class); System.out.println("空EnumSet: " + sizes); } }
Risultato di output
空EnumSet: []
在这里,我们创建了一个名为sizes的空枚举。
注意:我们只能在上述程序中插入枚举类型为Size的元素。 这是因为我们使用Size枚举创建了空的枚举集。
range()方法创建一个枚举集,其中包含e1和e2之间枚举的所有值,包括这两个值。例如
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // 使用range()创建一个EnumSet EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); } }
Risultato di output
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
of()方法创建一个包含指定元素的枚举集。例如,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // 使用带有单个参数的of() 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); } }
Risultato di output
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
La classe EnumSet fornisce alcuni metodi che ci permettono di eseguire vari elementi sull'insieme enum.
add() - Inserire il valore enum specificato nell'insieme enum
addAll() - Inserire tutti gli elementi di un insieme specifico nell'insieme
Ad esempio,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Creare un EnumSet utilizzando allOf() EnumSet<Size> sizes1 = EnumSet.allOf(Size.class); //Creare un EnumSet utilizzando noneOf() EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class); //Aggiunta di elementi utilizzando il metodo add sizes2.add(Size.MEDIUM); System.out.println("EnumSet utilizza il metodo add(): " + sizes2); //Utilizzo del metodo addAll() sizes2.addAll(sizes1); System.out.println("EnumSet utilizza il metodo addAll(): " + sizes2); } }
Risultato di output
EnumSet utilizza il metodo add(): [MEDIUM] EnumSet utilizza il metodo addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
Nell'esempio sopra, abbiamo utilizzato il metodo addAll() per inserire tutti gli elementi dell'EnumSet di sizes1 nell'EnumSet di sizes2.
Puoi anche utilizzare addAll() per inserire gli elementi di altri set (come ArrayList, LinkedList, ecc.) nell'EnumSet. Tuttavia, tutti i set devono avere lo stesso tipo di enum.
Per accedere agli elementi dell'EnumSet, possiamo utilizzare il metodo iterator(). Per utilizzare questo metodo, dobbiamo importare il pacchetto java.util.Iterator. Ad esempio,
import java.util.EnumSet; import java.util.Iterator; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Creare un EnumSet utilizzando allOf() EnumSet<Size> sizes = EnumSet.allOf(Size.class); Iterator<Size> iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Risultato di output
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Precauzioni:
hasNext() - Restituisce true se esiste un elemento successivo nel set di enumerazione
next() - Restituisce l'elemento successivo nel set di enumerazione
remove() - Rimuovi l'elemento specificato dal set di enumerazione
removeAll() - Rimuovi tutti gli elementi dal set di enumerazione
Ad esempio,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Usa allOf() per creare EnumSet EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); // Usa remove() boolean value1 = sizes.remove(Size.MEDIUM); System.out.println("È stato rimosso MEDIUM? " + value1); // Usa removeAll() boolean value2 = sizes.removeAll(sizes); System.out.println("Sono stati rimossi tutti gli elementi? " + value2); } }
Risultato di output
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] È stato rimosso MEDIUM? true Sono stati rimossi tutti gli elementi? true
Metodo | Descrizione |
---|---|
copyOf() | Crea una copia di EnumSet |
contains() | Cerca l'elemento specificato da EnumSet nel contesto e restituisci il risultato booleano |
isEmpty() | Verifica se EnumSet è vuoto |
size() | Restituisce la dimensione di EnumSet |
clear() | Elimina tutti gli elementi da EnumSet |
EnumSet implementa anche le interfacce Cloneable e Serializable.
Interfaccia Cloneable
Permette a EnumSet di creare una copia dell'istanza della classe.
Interfaccia serializzabile (Serializable)
Ogni volta che è necessario trasmettere un oggetto Java attraverso la rete, è necessario convertire l'oggetto in bit o byte. Questo perché gli oggetti Java non possono essere trasportati attraverso la rete.
L'interfaccia Serializable permette a una classe di essere serializzata. Questo significa che Serializable può convertire gli oggetti delle classi implementate in bit o byte.
L'EnumSet offre un metodo di memorizzazione dei valori enumerativi più efficiente rispetto ad altre implementazioni di set (come HashSet, TreeSet).
Il set enumerativo memorizza solo i valori enumerativi di un enumerativo specifico. Pertanto, il JVM conosce tutti i valori possibili della collezione.
Ecco perché i set enumerativi sono implementati internamente come sequenze di bit. I bit specificano se un elemento appare nel set enumerativo.
Se l'elemento esiste nel set, aprirà il bit corrispondente.