ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java集合之EnumSet

2021-07-31 10:31:36  阅读:150  来源: 互联网

标签:Java 元素 EnumSet 枚举 Session sessions1 集合


介绍

EnumSet 是一个专为枚举设计的集合类,EnumSet 中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建 EnumSet 时显式或隐式地指定。

  • EnumSet 的集合元素也是有序的,EnumSet 以枚举值在 Enum 类内的定义顺序来决定集合元素的顺序。

  • EnumSet 在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此 EnumSet 对象占用内存很小,而且运行效率很好。尤其是进行批量操作(如调用 containsAll () 和 retainAll () 方法)时,如果其参数也是 EnumSet 集合,则该批量操作的执行速度也非常快。

  • EnumSet 集合不允许加入 null 元素,如果试图插入 null 元素,EnumSet 将抛出 NullPointerException 异常。

  • EnumSet 类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的类方法来创建 EnumSet 对象。

  • 如果只是想判断 EnumSet 是否包含 null 元素或试图删除 null 元素都不会抛出异常,只是删除操作将返回 false,因为没有任何 null 元素被删除。

方法介绍

方法介绍:

  • EnumSet allOf(Class elementType): 创建一个包含指定枚举类里所有枚举值的 EnumSet 集合。

  • EnumSet complementOf(EnumSet e): 创建一个其元素类型与指定 EnumSet 里元素类型相同的 EnumSet 集合,新 EnumSet 集合包含原 EnumSet 集合所不包含的、此类枚举类剩下的枚举值(即新 EnumSet 集合和原 EnumSet 集合的集合元素加起来是该枚举类的所有枚举值)。

  • EnumSet copyOf(Collection c): 使用一个普通集合来创建 EnumSet 集合。

  • EnumSet copyOf(EnumSet e): 创建一个指定 EnumSet 具有相同元素类型、相同集合元素的 EnumSet 集合。

  • EnumSet noneOf(Class elementType): 创建一个元素类型为指定枚举类型的空 EnumSet。

  • EnumSet of(E first,E…rest): 创建一个包含一个或多个枚举值的 EnumSet 集合,传入的多个枚举值必须属于同一个枚举类。

  • EnumSet range(E from,E to): 创建一个包含从 from 枚举值到 to 枚举值范围内所有枚举值的 EnumSet 集合

示例代码

public class EnumSetDemo {
    public static void main(String[] args) {
        EnumSet<Session> sessions = EnumSet.allOf(Session.class);
        System.out.println(sessions.contains(Session.START));
        sessions.forEach(System.out::println);
        EnumSet<Session> sessions1 = EnumSet.noneOf(Session.class);
        sessions1.add(Session.RUNNING);
        sessions1.add(Session.START);
        sessions1.forEach(System.out::println);
        System.out.println("sessions1.contains(Session.RUNNING) = " + sessions1.contains(Session.RUNNING));
    }
}

enum Session{
    START,
    RUNNING,
    STOP;
}

标签:Java,元素,EnumSet,枚举,Session,sessions1,集合
来源: https://www.cnblogs.com/hnxbp/p/15083487.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有