答案 1
EnumSet
实际上有两个实现 - 一个用于具有64个或更少元素的枚举(指示集合中存在值的标志存储为),另一个用于其他枚举(标志存储为)。返回其中一个的工厂方法,具体取决于传入的枚举类。long
long[]
EnumSet
这样的优化对于没有意义(因为无论如何都需要数组来存储值),因此它是一个具体的类。EnumMap
EnumMap
答案 2
EnumSet
使用两个实现,和 ,具体取决于枚举的大小(阈值为 64 个元素)。工厂方法委托给适当的实现。RegularEnumSet
JumboEnumSet
EnumMap
另一方面,对于所有枚举类型的工作方式相同(它保留所有枚举项的数组和大小相等的值数组),因此不需要抽象类。
推荐
-
-
自由标记:如何使用枚举作为键循环访问 Map 下面的代码不起作用,因为 Freemarker 似乎将 [] 中的表达式的值强制转换为 String,然后将其用作键,这不是实际预期的。 准备模板模型: 在,描述了如何访问Enum本身,但我没有找到有关如何
-
泛型和类<?extendes Enum<?>>, EnumSet.allOf(class) vs class.getEnumConstants() 我有以下BeanValidation代码,可以正常工作,并允许验证Bean是否注释:
-
编译错误 - 带枚举的开关 嗨,有人知道为什么当我切换枚举时,情况应该在不合格的枚举值上吗? 例: 是合法的。 我知道var是特定类型(Enum),但是为什么编译器关心我是否使用Enum值的完全限定名
-