首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏落叶飞翔的蜗牛

    聊聊EnumSet和EnumMap

    EnumSet and EnumMap EnumSet 是一种专门为枚举类型所设计的 Set 类型。 EnumSet 是抽象类,其有两个实现:RegularEnumSet 、JumboEnumSet,选择哪一个取决于实例化时枚举中常量的数量。 在很多场景中的枚举常量集合操作(如:取子集、增加、删除、containsAll和removeAll批操作)使用EnumSet非常合适;如果需要迭代所有可能的常量则使用Enum.values()。 public class Pizza { private static EnumSet<PizzaStatus> undeliveredPizzaStatuses = EnumSet.of

    77910发布于 2021-01-14
  • 来自专栏用户8644135的专栏

    一文弄懂EnumMap和EnumSet

    EnumSet 跟EnumMap很类似,EnumSet是一个set,然后set中的元素都是某个Enum类型。 EnumSet是一个抽象类,要创建EnumSet类可以使用EnumSet提供的两个静态方法,noneOf和allOf。 从上面的代码我们可以看到EnumSet有两个实现,长度大于64的时候使用JumboEnumSet,小有64的时候使用RegularEnumSet。 再看一下allOf: public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) { EnumSet 总结 EnumMap和EnumSet对特定的Enum对象做了优化,可以在合适的情况下使用。

    46940发布于 2021-06-22
  • 来自专栏wOw的Android小站

    使用EnumSet代替位运算简化代码逻辑

    使用EnumSet替代位运算 到这里你可能觉得问题解决了就完了,但是还没有! 内部实现上,每个EnumSet内容都表示为位矢量,一般(低于64个元素)整个EnumSet就是用一个long的位运算来表示的。 下面是用EnumSet修改后的示例代码,它更加简短,清楚也更安全。 // 博客地址:wossoneri.github.io public class UsbManager { private EnumSet<UsbFlags> mUsbState = EnumSet.noneOf 最后,EnumSet类集成了位域自身的简洁性和性能优势,又拥有枚举的所有优点,所以使用它代替位域是非常好的选择。

    2.1K30发布于 2020-01-20
  • 来自专栏bit哲学院

    Java中Enum、EnumMap、EnumSet使用示例

    参考链接: Java EnumSet 原文地址:https://examples.javacodegeeks.com/java-basics/java-enumeration-example/  === Car.valueOf("BMW"), Car.BMW.getPrice());         System.out.println("Size is now: " + cars.size());     } } 3.EnumSet 示例  import java.util.EnumSet; public class EnumSetExample {     public static void main(String[] args ) {         // Create an EnumSet that contains all days of the week.         EnumSet week = EnumSet.allOf(Day.class);         // Print the values of an EnumSet.        

    53720发布于 2021-04-22
  • Java集合框架(二)—— HashSet、LinkedHashSet、TreeSet和EnumSet

    EnumSetEnumSet是一个专为枚举设计的集合类,EnumSet中所有值都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐性的指定。 EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的排序。    EnumSet类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的static方法来创建EnumSet对象。 static EnumSet complementOf(EnumSet s); 创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet,新EnumSet集合包含原EnumSet所不包含的、 static EnumSet copyOf(EnumSet s);   创建一个与指定EnumSet具有相同元素集合类型、相同集合元素的EnumSet

    1.5K90发布于 2018-05-09
  • 来自专栏站长的编程笔记

    【说站】java中EnumSet的使用

    java中EnumSet的使用 说明 1、EnumSet可以存储一个枚举中的元素,它提供了一种通过集合来操作枚举类的方式。 2、EnumSet中的所有元素都必须指定枚举类型的枚举值,这种枚举类型在创建EnumSet时是显性的或隐性的。
         * 就其内部而言,它(可能)就是将一个 long 值作为比特向量,所以 EnumSet 非常快速高效。 */     private static void enumSet() {         // 空构造器         EnumSet<WeekEnum> weekEnums = EnumSet.noneOf weekEnums = EnumSet.complementOf(weekEnums);         System.out.println(weekEnums);     } 以上就是java中EnumSet

    66130编辑于 2022-11-23
  • 来自专栏程序那些事

    一文弄懂EnumMap和EnumSet

    EnumSet 跟EnumMap很类似,EnumSet是一个set,然后set中的元素都是某个Enum类型。 EnumSet是一个interface而不是一个类,要创建EnumSet类可以使用EnumSet提供的两个静态方法,noneOf和allOf。 从上面的代码我们可以看到EnumSet有两个实现,长度大于64的时候使用JumboEnumSet,小有64的时候使用RegularEnumSet。 再看一下allOf: public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) { EnumSet 总结 EnumMap和EnumSet对特定的Enum对象做了优化,可以在合适的情况下使用。

    47720发布于 2020-07-08
  • 来自专栏老马说编程

    (51) 剖析EnumSet 计算机程序的思维逻辑

    下面,我们先来看EnumSet的基本用法,然后通过一个场景来看EnumSet的应用,最后,我们分析EnumSet的实现机制。 基本用法 与TreeSet/HashSet不同,EnumSet是一个抽象类,不能直接通过new新建,也就是说,类似下面代码是错误的: EnumSet<Size> set = new EnumSet<Size >(); 不过,EnumSet提供了若干静态工厂方法,可以创建EnumSet类型的对象,比如: public static <E extends Enum<E>> EnumSet<E> noneOf( 创建的EnumSet对象的实际类型是EnumSet的子类,待会我们再分析其具体实现。 <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) <E extends Enum<E>> EnumSet<E> copyOf(Collection

    94970发布于 2018-01-31
  • 来自专栏SnailTyan

    Java中的EnumSet_Effective Java 2.0_Item 1知识点

    EnumSet EnumSet是Java Set接口的一个特别实现,在JDK 1.5中开始支持,Enum类型也正式引入到了Java中。 What is EnumSet EnumSet是Set接口的一个实现,它只能用来存储Enum常量或其子类,不能存储其它类型。EnumSet是设计模式中工厂方法创建实例的一个很好例子。 EnumSet中提供了多种创建EnumSet实例的静态工厂方法,例如of方法(进行了函数重载),copyOf方法,noneOf方法等。 3. Important points about EnumSet 一个EnumSet中只能包含一种枚举类型。 EnumSet中不能放入null元素,放入会抛出空指针异常。 EnumSet是线程非安全的。 Source Code of EnumSet EnumSet: public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<

    32820编辑于 2022-05-09
  • 来自专栏BAT的乌托邦

    【小家Java】深入理解Java枚举类型(enum)及7种常见的用法(含EnumMap和EnumSet

    创建EnumSet并不能使用new关键字,因为它是个抽象类,而应该使用其提供的静态工厂方法,EnumSet的静态工厂方法比较多,如下: // 创建一个具有指定元素类型的空EnumSet。 rest) //创建一个包含参数容器中的所有元素的EnumSet <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) <E extends Enum //指定补集,也就是从全部枚举类型中去除参数集合中的元素,如下去掉上述enumSet2的元素 EnumSet<Color> enumSet3= EnumSet.complementOf //复制enumSet5容器的数据作为初始化数据 EnumSet<Color> enumSet6= EnumSet.copyOf(enumSet5); System.out.println enumSet7=EnumSet.copyOf(list); System.out.println("enumSet7:"+enumSet7.toString());

    7.2K42发布于 2019-09-03
  • 来自专栏三分恶的专栏

    Java Review (二十六、集合----- Set 集合)

    API:java.util.TreeSet EnumSetEnumSet 是一个专为枚举类设计的集合类, EnumSet 中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建 EnumSet EnumSet 类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的类方法来创建 EnumSet对象 。 EnumSet 类它提供了如下常用的类方法来创建 EnumSet 对象 : EnumSet allOf(Class elementType): 创建一个包含指定枚举类里所有枚举值的 EnumSet 集合 EnumSet complementOf(EnumSet s): 创建一个其元素类型与指定 EnumSet 里元素类型相同的 *EnumSet 集合,新 EnumSet 集合包含原 EnumSet 集合所不包含的 EnumSet copyOf(EnumSet s): 创建一个与指定 EnumSet 具有相同元素类型、相同集合元素的EnumSet 集合 。

    98610发布于 2020-07-16
  • 来自专栏全栈程序员必看

    java中的Set集合

    EnumSetEnumSet是一个专门为枚举类设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。 EnumSet类没有暴露任何构造器来创建该类的实例,EnumSet类提供了以下类方法来创建EnumSet对象。 EnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,新的集合里包含原集合不包含的枚举值。 EnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合; EnumSet copyOf(EnumSet s):复制原集合; EnumSet noneOf(Class EnumSet enumSet = EnumSet.copyOf(c); System.out.println(enumSet);//[Spring, Summer]

    1.7K10编辑于 2022-08-11
  • 来自专栏Java极客技术

    Java 中一个你绝对没用过,但是很好用的数据结构

    EnumSet 说完了 EnumMap 我们再来看看 EnumSetEnumSet 是一个用来操作 Enum 的集合,是一个抽象类,它有两个继承类,JumboEnumSet 和 RegularEnumSet 通过下面的方式可以创建一个空的 EnumSet,在后续进行使用。 public static void main(String[] args) { EnumSet<Color> enumSet = EnumSet.noneOf(Color.class); enumSet.add(Color.BLUE); enumSet.add(Color.RED); System.out.println(enumSet.size()); } EnumSet <Color> enumSet = EnumSet.allOf(Color.class); System.out.println(enumSet.size()); } 另外前面提到会使用到枚举的

    53250编辑于 2022-12-04
  • 来自专栏狗哥的 Java 世界

    java | 深入理解Java枚举类型(三)

    ,而应该使用其提供的静态工厂方法,EnumSet的静态工厂方法比较多,如下: //创建一个具有指定元素类型的空EnumSetEnumSet<E> noneOf(Class<E> elementType) //创建一个指定元素类型并包含所有枚举值的EnumSet <E extends Enum<E>> EnumSet <Color> enumSet3= EnumSet.complementOf(enumSet2); System.out.println("指定补集:"+enumSet3.toString -----------------"); //复制enumSet5容器的数据作为初始化数据 EnumSet<Color> enumSet6= EnumSet.copyOf enumSet7=EnumSet.copyOf(list); System.out.println("enumSet7:"+enumSet7.toString()); } }

    1.2K30发布于 2019-10-17
  • 来自专栏chenchenchen

    深入浅出的分析 Set集合

    ),其中 AbstractSet、EnumSet 属于抽象类,EnumSet 是在 jdk1.5 中新增的,不同的是 EnumSet 集合元素必须是枚举类型。 EnumSet EnumSet 是一个与枚举类型一起使用的专用 Set 集合,继承自AbstractSet抽象类。 EnumSet是一个虚类,不能直接通过实例化来获取对象,只能通过它提供的静态方法来返回EnumSet实现类的实例。 ://创建一个 EnumSet,将EnumEntity 元素内容添加到EnumSetEnumSet allSet = EnumSet.allOf(EnumEntity.class);System.out.println (allSet); 输出结果:[WOMAN, MAN] 创建一个 EnumSet,添加指定的枚举元素://创建一个 EnumSet,添加 WOMAN 到 EnumSetEnumSet customSet

    67520发布于 2019-11-26
  • 来自专栏用户8907256的专栏

    Java 中一个你绝对没用过,但是很好用的数据结构

    EnumSet 说完了 EnumMap 我们再来看看 EnumSetEnumSet 是一个用来操作 Enum的集合,是一个抽象类,它有两个继承类,JumboEnumSet和 RegularEnumSet 通过下面的方式可以创建一个空的EnumSet,在后续进行使用。 public static void main(String[] args) { EnumSet<Color> enumSet = EnumSet.noneOf(Color.class); enumSet.add(Color.BLUE); enumSet.add(Color.RED); System.out.println(enumSet.size()); } EnumSet <Color> enumSet = EnumSet.allOf(Color.class); System.out.println(enumSet.size()); } 另外前面提到会使用到枚举的

    27310编辑于 2022-04-28
  • 来自专栏java干货

    Java enum的用法详解

    ; testEnumMap(); //3.演示EnumSet对象的使用 System.out.println("演示EnumSet对象的使用。。。。。") ; testEnumSet(); } /** * 演示EnumSet对象的使用 EnumSet是一个抽象类,获取一个类型的枚举类型内容
    * / private static void testEnumSet() { EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class [key=RED,value=红灯] [key=GREEN,value=绿灯] [key=YELLLOW,value=黄灯] 演示EnumSet对象的使用。。。。。 当前EnumSet中数据为:1 当前EnumSet中数据为:2 当前EnumSet中数据为:3 Disconnected from the target VM, address: '127.0.0.1:

    1K50发布于 2021-02-17
  • 来自专栏BAT的乌托邦

    JDK基础类库java.util包下那些你可能不知道的工具们大盘点(一)EnumMap、EnumSet【享学Java】

    EnumSet是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。 同样的我们使用它的原因是:效率高(EnumSet比HashSet更快)。 ((EnumSet) set)); //[RED] // copyOf方法克隆一个(请注意是克隆,并不是返回的一个视图) System.out.println(EnumSet.copyOf 其实这个时候JDK就会用EnumSet的另一个实现JumboEnumSet 实际情况是:试问一下,谁的枚举值能定义64个这么多???拉出去斩了??? (计算机中一个字节(byte)占8位(bit)) 总而言之,EnumSet的实现是非常高级,效率也是非常的高的。

    1.1K20发布于 2019-09-03
  • 来自专栏沉默王二

    恕我直言,我怀疑你并不会用 Java 枚举

    EnumSet 是一个专门针对枚举类型的 Set 接口的实现类,它是处理枚举类型数据的一把利器,非常高效(内部实现是位向量,我也搞不懂)。 因为 EnumSet 是一个抽象类,所以创建 EnumSet 时不能使用 new 关键字。不过,EnumSet 提供了很多有用的静态工厂方法: ? 下面的示例中使用 noneOf() 创建了一个空的 PlayerType 的 EnumSet;使用 allOf() 创建了一个包含所有 PlayerType 的 EnumSet。 <PlayerType> enumSetNone = EnumSet.noneOf(PlayerType.class); System.out.println(enumSetNone); EnumSet<PlayerType> enumSetAll = EnumSet.allOf(PlayerType.class); System.out.println

    49321发布于 2020-06-09
  • 来自专栏全栈程序员必看

    Java枚举详解

    Java枚举(enum)详解:Java声明枚举类型、枚举(enum)类、EnumMap 与 EnumSet 声明枚举 枚举类 为枚举添加方法 EnumMap 与 EnumSet EnumMap EnumSetEnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型。EnumSet 提供了许多工厂方法以便于初始化,如表 2 所示。 表2 EnumSet 类的常用方法 方法名称 描述 allOf(Class element type) 创建一个包含指定枚举类型中所有枚举成员的 EnumSet 对象 complementOf(EnumSet s) 创建一个与指定 EnumSet 对象 s 相同的枚举类型 EnumSet 对象,并包含所有 s 中未包含的枚举成员 copyOf(EnumSet s) 创建一个与指定 EnumSet 对象 s 创建包含指定枚举成员的 EnumSet 对象 range(E from ,E to) 创建一个 EnumSet 对象,该对象包含了 from 到 to 之间的所有枚举成员 EnumSet 作为 Set

    1.1K40编辑于 2022-09-05
领券