亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 枚举集

Java 枚举集

在本教程中,我们将通过示例了解 Java EnumSet 类及其各种方法。

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

在了解 EnumSet 之前,请务必了解 Java Enums。

它实现了Set接口。


创建枚举集

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

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

1。使用 allOf(Size)

allof() 方法创建一个枚举集,其中包含指定枚举类型 Size 的所有值 .例如,

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<Size> sizes = EnumSet.allOf(Size.class);

        System.out.println("EnumSet: " + sizes);
    }

}

输出

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

注意声明,

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

这里,Size.class 表示 大小 我们创建的枚举。


2。使用 noneOf(Size)

noneOf() 方法创建一个空的枚举集。例如,

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<Size> sizes = EnumSet.noneOf(Size.class);

        System.out.println("Empty EnumSet: " + sizes);
    }
}

输出

Empty 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) {

        // Creating an EnumSet using range()
        EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);

        System.out.println("EnumSet: " + sizes);
    }
}

输出

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) {

        // Using of() with a single parameter
        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);
    }
}

输出

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

EnumSet 的方法

EnumSet 类提供了允许我们在枚举集上执行各种元素的方法。


向 EnumSet 插入元素

例如,

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating an EnumSet using allOf()
        EnumSet<Size> sizes1 = EnumSet.allOf(Size.class);

        // Creating an EnumSet using noneOf()
        EnumSet<Size> 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);
    }
}

输出

EnumSet using add(): [MEDIUM]
EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]

在上面的例子中,我们使用了 addAll() 插入枚举集 sizes1 的所有元素的方法 到一个枚举集 sizes2 .

也可以插入其他集合中的元素,例如 ArrayList , LinkedList 等到使用 addAll() 的枚举集 .但是,所有集合都应该是相同的枚举类型。


访问 EnumSet 元素

要访问枚举集的元素,我们可以使用 iterator() 方法。为了使用这个方法,我们必须导入 java.util.Iterator 包裹。例如,

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

输出

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,

注意


删除 EnumSet 元素

例如,

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating EnumSet using allOf()
        EnumSet<Size> 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);
    }
}

输出

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Is MEDIUM removed? true
Are all elements removed? true

其他方法

方法 说明
copyOf() 创建 EnumSet 的副本
contains() 搜索 EnumSet 对于指定元素并返回一个布尔结果
isEmpty() 检查 EnumSet 是空的
size() 返回EnumSet的大小
clear() EnumSet 中移除所有元素

可克隆和可序列化的接口

EnumSet 类还实现了 CloneableSerializable 接口。

可克隆界面

它允许 EnumSet 类来复制该类的实例。

可序列化接口

每当需要通过网络传输 Java 对象时,都需要将对象转换为位或字节。这是因为 Java 对象无法通过网络传输。

Serializable 接口允许类被序列化。这意味着实现 Serializable 的类的对象 可以转换为位或字节。


为什么选择 EnumSet?

EnumSet 提供了一种比其他集合实现(如 HashSet , TreeSet )。

枚举集仅存储特定枚举的枚举值。因此,JVM 已经知道该集合的所有可能值。

这就是枚举集在内部实现为位序列的原因。位指定元素是否存在于枚举集中。

如果该元素存在于集合中,则相应元素的位被打开。


java

  1. Java 运算符
  2. Java 评论
  3. Java for-each 循环
  4. Java 字符串
  5. Java 接口
  6. Java 匿名类
  7. Java 枚举
  8. Java枚举构造函数
  9. Java try-with-resources
  10. Java 注释
  11. Java 断言
  12. Java 向量