EffectiveJava(32) -- 用EnumSet代替位域
来源:互联网 发布:班级管理系统数据库 编辑:程序博客网 时间:2024/05/22 14:54
在进入正题之前,首先让我们来了解一下什么是位域
位域是指信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
Java中,当你需要传递多组常量集时,要使用EnumSet类代替位域.因为当位域一数字形式打印时,翻译位域要比翻译int枚举常量要困难得多,当你要遍历位域表示的所有元素时,也会变得很困难.而EnumSet可以有效的表示从单个枚举类型中提取的多个值的多个集合.这个类实现Set接口,提供了丰富的功能和类型安全性,以及可以从任何其他Set实现中得到的互用性.
下面用EnumSet将2的不同倍数赋值给每个常量
public class Text{ public enum Style{BOLD,ITALIC,UNDERLINE,STRIKETHROUGH} public void applyStyles(Set<Style> styles){ //实现方案 } }
客户端代码
text.applyStyles(EnumSet.of(Style.BOLD,Style.ITALIC));
总之:正是因为枚举类型要用在集合(Set)中,所以没有理由用位域来表示它.EnumSet类集位域的简洁和性能的优势及枚举类型的所有优点与一身.实际上EnumSet也有个缺点,即它无法创建不可变的EnumSet(Java1.6为止没有解决).同时,可以用Collections.unmodifiable将EnumSet封装起来,但是间接性和性能会受到影响.
7 0
- EffectiveJava(32) -- 用EnumSet代替位域
- (32):用EnumSet代替位域
- 用EnumSet代替位域。
- Java EnumSet 代替位域
- Effective Java(用实例域代替序数、用EnumSet代替位域)
- EffectiveJava(31) -- 使用实例域代替Enum的序数排序
- EffectiveJava之19-用类层次代替联合
- EffectiveJava-考虑用静态工厂方法代替构造器
- EffectiveJava 第1条 :创建和销毁对象--考虑用静态方法代替构造器
- 静态方法代替构造器-effectiveJava读书笔记
- EnumSet
- EnumSet
- EnumSet
- enumset
- EffectiveJava
- EffectiveJava
- EffectiveJava(33) -- EnumMap详解(使用EnumMap代替序数)
- 用位操作代替求余操作
- 关于fragment的onAttach方法
- 学习笔记—scala基础II
- 内部匿名类 接口
- 基于nodejs模拟浏览器post请求爬取json数据
- 借百度前端学院JS任务二总结JS数组(一)
- EffectiveJava(32) -- 用EnumSet代替位域
- [C++]Lambda表达式简介
- CCF CSP试题 201512-2 消除类游戏
- 西普实验吧密码学CTF--压缩的问题
- @JAVA_开发环境搭建(windows)
- 《Objective-C编程全解》 读书笔记 第十三章 对象的复制及存储
- web.xml文件详解
- HDU1285-确定比赛名次
- Java快速排序