美文网首页
Effective Java - 用EnumSet代替位域

Effective Java - 用EnumSet代替位域

作者: DZQANN | 来源:发表于2022-06-30 22:13 被阅读0次

第35条 用实例域代替序数

  1. 所有的枚举都有一个ordinal()方法,返回每个枚举常量在类型中的数字位置
  2. 永远不要根据枚举的序数导出与它关联的值,而是要将它保存在一个实例域中

第36条 用EnumSet代替位域

  1. 以前如果使用int作为常量,则可以通过位运算表示一组常量,有点类似于bitmap

    public 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则可以表示不同类型的组合

  2. java.util提供了EnumSet类来有效地表示从单个枚举类型中提取的多个值的多个集合

思考

  1. bitmap是一种性能非常高的数据结构,因为它使用的都是位运算,对于CPU来说运算逻辑更简单
  2. EnumSet的本质其实是对位运算的封装,里面的实现其实都是位运算,和常使用的HashSetTreeSet完全牛欧昂。这也是一个非常典型的封装隐藏实现的例子。
  3. 开发中如果Set的泛型是enum,推荐使用EnumSetEnumMap这种专门的数据结构,会有非常大的性能提升

相关文章

网友评论

      本文标题:Effective Java - 用EnumSet代替位域

      本文链接:https://www.haomeiwen.com/subject/jbkhbrtx.html