第35条 用实例域代替序数
- 所有的枚举都有一个
ordinal()方法,返回每个枚举常量在类型中的数字位置 - 永远不要根据枚举的序数导出与它关联的值,而是要将它保存在一个实例域中
第36条 用EnumSet代替位域
-
以前如果使用
int作为常量,则可以通过位运算表示一组常量,有点类似于bitmappublic class Text { public static final int STYLE_BOLD = 1 << 0; public static final int STYLE_ITALIC = 1 << 1; public static final int STYLE_UNDERLINE = 1 << 2; public void applyStyles(int styles) { } }取0~3则可以表示不同类型的组合
-
java.util提供了
EnumSet类来有效地表示从单个枚举类型中提取的多个值的多个集合
思考
-
bitmap是一种性能非常高的数据结构,因为它使用的都是位运算,对于CPU来说运算逻辑更简单 -
EnumSet的本质其实是对位运算的封装,里面的实现其实都是位运算,和常使用的HashSet、TreeSet完全牛欧昂。这也是一个非常典型的封装隐藏实现的例子。 - 开发中如果
Set的泛型是enum,推荐使用EnumSet、EnumMap这种专门的数据结构,会有非常大的性能提升








网友评论