`

读EnumSet源码

阅读更多

//一个基于枚举的Set,其效率在大多数时候都比HashSet高。
//该类是一个抽象类其实现类有RegularEnumSet和JumboEnumSet。

//创建一个最初包含指定元素的枚举(带of的方法实现基本都一样)
public static <E extends Enum<E>> EnumSet<E> of(E e) {
        EnumSet<E> result = noneOf(e.getDeclaringClass());
        result.add(e);
        return result;
    }

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
        //根据elementType获取枚举
        Enum[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");
        //根据长度的不同调用不同的实现
        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

//包含指定元素类型的所有枚举
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) {
        EnumSet<E> result = noneOf(elementType);
        result.addAll();
        return result;
    }

//构造一个和指定枚举相同的EnumSet。
public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) {
        return s.clone();
    }

//从指定collection中初始化的一个EnumSet
public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c) {
        if (c instanceof EnumSet) {
            return ((EnumSet<E>)c).clone();
        } else {
            if (c.isEmpty())
                throw new IllegalArgumentException("Collection is empty");
            Iterator<E> i = c.iterator();
            E first = i.next();
            EnumSet<E> result = EnumSet.of(first);
            while (i.hasNext())
                result.add(i.next());
            return result;
        }
    }

//包含指定set中不包含的所有元素
public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s) {
        EnumSet<E> result = copyOf(s);
        result.complement();
        return result;
    }
分享到:
评论

相关推荐

    阅读EnumSet抽象类

    了解EnumSet抽象类的源码和实现机制 EnumSet抽象类是Java枚举类型的泛型容器,具有速度快、占用内存小、效率高等特性。EnumSet的设计是专门为枚举类的集合类,所有元素必须是枚举类型,集合元素是有序的,内部以位...

    java集合-EnumSet的使用

    EnumSet 是 Java 中用于存储枚举类型元素的集合类。它是 AbstractSet 的子类,并专门为枚举类型设计,提供了高效的实现。 下面是关于 EnumSet 的一些重要信息: 存储枚举元素:EnumSet 只能存储同一个枚举类型的...

    Java中EnumSet代替位域代码详解

    然而,《Effective Java》第二版中提到,Java提供了一个更好的替代方案:`EnumSet`。本文将深入探讨`EnumSet`如何代替位域,并通过代码示例展示其优势。 位域使用`int`或`byte`等整型常量来存储一系列标志,例如: ...

    28个java常用的工具类源码

    16. **EnumSet和EnumMap**:针对枚举类型的特殊集合实现,效率较高。 17. **ConcurrentHashMap**:线程安全的哈希表,是高并发场景下的常用数据结构。 18. **CountDownLatch和CyclicBarrier**:同步原语,用于多...

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    这篇博客将深入探讨Java枚举的特性和使用方法,包括`EnumSet`和`EnumMap`这两个与枚举相关的数据结构。 首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`...

    jdk1.8源码

    JDK1.8为`EnumSet`和`EnumMap`增加了新的静态工厂方法,使得创建枚举集合更加方便。 十、动态类型语言支持 JDK1.8增加了对动态类型语言的支持,如GraalVM,使得Java可以更好地与其他动态语言交互。 以上只是JDK1.8...

    Java EnumSet工作原理初窥

    EnumSet是Java枚举类型的泛型容器,Java既然有了SortedSet、TreeSet、HashSet等容器,为何还要多一个EnumSet呢?答案肯定是EnumSet有一定的特性,举个例子,EnumSet的速度很快。其他特性不一一列举了,毕竟本文的...

    一文弄懂EnumMap和EnumSet

    【EnumMap和EnumSet详解】 在Java编程中,当我们需要处理特定枚举类型(Enum)作为键(Key)的映射关系时,EnumMap和EnumSet成为两种非常实用的工具类。它们是Java集合框架中专门为枚举类型设计的高效容器,提供了...

    2021年EFFECTIVEJAVA读书笔记.docx

    本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了编译时类型安全、自动命名空间隔离、可以...

    Java Collections 技术研讨会资料+(带源码)

    还有EnumSet和EnumMap,专门为枚举类型设计的高效集合实现。 在本次研讨会的实例代码中,你将看到如何创建、遍历、修改和操作这些集合的示例。这些代码涵盖了基本操作、性能测试、并发控制等方面,帮助你更好地理解...

    thinkinjava4源码-Thinking-In-Java4e:java编程思想第4版

    同时,注解在枚举中也有应用,如EnumSet和EnumMap。 通过这个源码包,你可以跟随《Thinking in Java》第四版的章节,逐个探索和实践每一个主题,加深对Java编程的理解,提升编程技能。同时,这也是一个很好的自我...

    enumset-用于创建紧凑的枚举集的库-Rust开发

    enumset一个用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有在枚举中使用这些集合的宏。用于定义可在紧凑位集中使用的枚举的库。 它支持最多128个变量的枚举,并具有一个宏以在常量中...

    Java—Set集合详解(HashSet/LinkedHashSet/TreeSet/EnumSet)

    本文将深入探讨Java中四个主要的Set实现类:HashSet、LinkedHashSet、TreeSet以及EnumSet。 首先,Set集合的核心特性是不存储重复元素。在尝试通过`add()`方法添加相同元素时,如果集合中已经存在该元素,`add()`...

    Options:有时在某些情况下,您想在OptionSet中使用Enum或希望Enum由Raw的Int类型支持,但同时也具有String标签

    目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...

    jdk7:查看JDK7原始码使用的项目-看

    6. **改进的枚举类型**:JDK7增强了枚举类型的功能,比如`java.util.EnumSet`和`java.util.EnumMap`的优化,提供了高效的集合操作。 7. **开关表达式**:虽然开关表达式(switch-on-string)在JDK7中并未完全实现,...

    Collections源码java-RockBottom:2D侧滚动资源收集游戏-现在开源!

    《Collections源码解析:以Java实现的2D侧滚动资源收集游戏RockBottom》 在Java编程领域,理解并深入研究源代码是提升技术能力的重要途径。本文将针对标题中的"Collections源码java-RockBottom:2D侧滚动资源收集...

    java7hashmap源码-Effective-Java-3th:Effective-Java-3th

    hashmap源码 Effective Java 3th 索引 创建和销毁对象 考虑使用静态工厂方法代替构造方法 优点: 有名字 每次调用的时候,不一定要创建新的对象 可以返回一个类型的子类型 Collections就是这种用法 返回对象的类可以...

    jdk1.6源代码

    2. **枚举类型(Enum)的改进**:新增了`EnumSet`和`EnumMap`类,这两个类专门用于枚举类型的集合操作,提供了高效且类型安全的实现。 3. **NIO.2(New I/O 2)**:引入了`java.nio.file`包,提供了新的文件系统API...

    深入学习java源码-Java-Collection-Framework:java集合框架详解,这里有集合框架的深入学习并且贴出了部分重要

    此外,Java集合框架还包括`EnumSet`(枚举集)、`CopyOnWriteArrayList`和`CopyOnWriteArraySet`(线程安全的集合)以及`ConcurrentHashMap`(并发友好的哈希映射)等高级数据结构。 在源码学习中,理解这些类和...

    Java实现高效的枚举元素集合

    Set是Java集合类的重要...使用EnumSet类的add()方法添加元素,使用EnumSet类的remove()方法删除元素,使用EnumSet类的complementOf()方法获取对象的全部,使用EnumSet类的range()方法获取指定范围的元素。  代码如下

Global site tag (gtag.js) - Google Analytics