English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

教程基础Java

Java Flow Control

Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

Gestione delle eccezioni Java

Java List (list)

Java Queue (queue)

Java Map collection

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java EnumSet

在本教程中,我们将借助示例学习Java EnumSet类及其各种方法。

Java集合框架的EnumSet类提供了单个枚举的元素的集合实现。

在学习EnumSet之前,请确保了解Java Enums.

它实现Set接口.

创建EnumSet

为了创建一个枚举集,我们必须首先导入java.util.EnumSet包。

与其他集合实现不同,枚举集合没有公共构造函数。我们必须使用预定义的方法来创建一个枚举集。

1. 使用allOf(Size)

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枚举。

2. 使用noneOf(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枚举创建了空的枚举集。

3. 使用range(e1,e2)方法

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]

4. 使用of()方法

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]

Metodi EnumSet

La classe EnumSet fornisce alcuni metodi che ci permettono di eseguire vari elementi sull'insieme enum.

Inserire elementi nell'EnumSet

  • 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.

Accesso agli elementi EnumSet

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

Rimozione degli elementi di EnumSet

  • 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

Altri metodi

MetodoDescrizione
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

Interfacce clonabili e serializzabili

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.

Perché scegliere EnumSet?

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.