Java中EnumSet代替位域代码详解

网友投稿 235 2023-02-20


Java中EnumSet代替位域代码详解

本文研究的主要是java中EnumSet代替位域的相关内容,具体介绍如下。

读书笔记《Effective Java 中文版 第2版》

位域表示法允许利用位操作,有效地执行先 union(联合)和 intersection(交集)这样的集合操作。但是位域有着int枚举常亮的所有缺点,甚至更多。当位域一数字形式打印时,翻译位域比翻译简单的int枚举常量要困难得多。甚至,要遍历位域表示的所有元素都没有很容易的方法。

//Bit field enumWYijBJzYdceration constant - OBSOLETE

public class Test {

public static final byte STYLE_BOLD = 1<<0; // 1

public static final byte STYLE_ITALIC = 1<&ltWYijBJzYdc;1; // 2

public static final byte STYLE_UNDERLINE = 1<<2; // 4

public static final byte STYLE_STRIKETHROUGH = 1<<3; // 6

//Parameter is bitwise OR of zero or more STYLE_ constants

public void applyStyles(int styles) { ... }

}

java.util 包提供了EnumSet类来有效地表示从单个枚举类型中提取的多个值的多个集合。这个类实现Set接口,提供了丰富的功能,类型安全性,以及可以从任何其他Set实现中得到的互用性。但是在内部具体的实现上,每个EnumSet内容都表示为位矢量。如果底层的枚举类型有64个或者更少的元素——大多数如此。整个EnumSet就用单个long来表示,因此它的性能比的上位域的性能。批处理,如removeAll和retainAll,都是利用位算法来实现的。就像手工替代位域实现得那样。但是可以避免手工操作时容易出现的错误以及不太雅观的代码,因为EnumSet替你完成了这项艰巨的工作。`

//EnumSet - a modern replacement for bit fields

public class Text {

public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH };

//Any Set could be passed in, but EnumSet is clearly best

public void applyStyles(Set


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信接口开发 java(微信接口开发课程要学哪些东西)
下一篇:Vue组件之自定义事件的功能图解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~