這篇文章給大家分享的是有關(guān)Java中EnumSet代替位域的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè),網(wǎng)站制作設(shè)計(jì),營(yíng)銷網(wǎng)頁(yè)按需制作網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),微信小程序開(kāi)發(fā),網(wǎng)站SEO優(yōu)化,網(wǎng)站設(shè)計(jì)制作案例豐富,是成都做網(wǎng)站公司和建站公司,歡迎咨詢。
具體介紹如下。
位域表示法允許利用位操作,有效地執(zhí)行先 union(聯(lián)合)和 intersection(交集)這樣的集合操作。但是位域有著int枚舉常亮的所有缺點(diǎn),甚至更多。當(dāng)位域一數(shù)字形式打印時(shí),翻譯位域比翻譯簡(jiǎn)單的int枚舉常量要困難得多。甚至,要遍歷位域表示的所有元素都沒(méi)有很容易的方法。
//Bit field enumeration constant - OBSOLETE public class Test { public static final byte STYLE_BOLD = 1<<0; // 1 public static final byte STYLE_ITALIC = 1<<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類來(lái)有效地表示從單個(gè)枚舉類型中提取的多個(gè)值的多個(gè)集合。這個(gè)類實(shí)現(xiàn)Set接口,提供了豐富的功能,類型安全性,以及可以從任何其他Set實(shí)現(xiàn)中得到的互用性。但是在內(nèi)部具體的實(shí)現(xiàn)上,每個(gè)EnumSet內(nèi)容都表示為位矢量。如果底層的枚舉類型有64個(gè)或者更少的元素——大多數(shù)如此。整個(gè)EnumSet就用單個(gè)long來(lái)表示,因此它的性能比的上位域的性能。批處理,如removeAll和retainAll,都是利用位算法來(lái)實(shí)現(xiàn)的。就像手工替代位域?qū)崿F(xiàn)得那樣。但是可以避免手工操作時(shí)容易出現(xiàn)的錯(cuò)誤以及不太雅觀的代碼,因?yàn)镋numSet替你完成了這項(xiàng)艱巨的工作。`
//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