最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中EnumSet代替位域代碼詳解

 更新時(shí)間:2018年02月01日 10:16:19   作者:司馬懿字仲達(dá)  
這篇文章主要介紹了Java中EnumSet代替位域代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

本文研究的主要是Java中EnumSet代替位域的相關(guān)內(nèi)容,具體介紹如下。

讀書(shū)筆記《Effective Java 中文版 第2版》

位域表示法允許利用位操作,有效地執(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)來(lái)有效地表示從單個(gè)枚舉類(lèi)型中提取的多個(gè)值的多個(gè)集合。這個(gè)類(lèi)實(shí)現(xiàn)Set接口,提供了豐富的功能,類(lèi)型安全性,以及可以從任何其他Set實(shí)現(xiàn)中得到的互用性。但是在內(nèi)部具體的實(shí)現(xiàn)上,每個(gè)EnumSet內(nèi)容都表示為位矢量。如果底層的枚舉類(lè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<Style> styles) { 
    System.out.println(styles);
  }

  public void test() {
    applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
  }
}

執(zhí)行 test() ,輸出 [BOLD, ITALIC] 。

EnumSet 類(lèi)集位域的簡(jiǎn)潔和性能優(yōu)勢(shì)及枚舉類(lèi)型的所有優(yōu)點(diǎn)于一身,所以我們沒(méi)有理由再使用位域表示法。除非是組成通信協(xié)議字段。

但實(shí)際上EnumSet也有一個(gè)缺點(diǎn)——它無(wú)法創(chuàng)建不可變的EnumSet,但我們可以用Collections.unmodifiableSet將EnumSet封裝起來(lái),但是簡(jiǎn)潔性和性能都會(huì)受到影響。

public void test() {
  EnumSet<Style> styles = EnumSet.of(Style.BOLD, Style.ITALIC);
  Set<Style> unmodifiableStyle = Collections.unmodifiableSet(styles);
  unmodifiableStyle.add(Style.UNDERLINE);
}

這樣如果往 unmodifiableSet 中添加元素就會(huì)報(bào) java.lang.UnsupportedOperationException

總結(jié)

以上就是本文關(guān)于Java中EnumSet代替位域代碼詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • java反射之Method的invoke方法實(shí)現(xiàn)教程詳解

    java反射之Method的invoke方法實(shí)現(xiàn)教程詳解

    這篇文章主要給大家介紹了關(guān)于java反射之Method的invoke方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java輸出鏤空金字塔實(shí)現(xiàn)案例

    java輸出鏤空金字塔實(shí)現(xiàn)案例

    小編最近接到領(lǐng)導(dǎo)安排,要求根據(jù)用戶輸入,打印出相應(yīng)層數(shù)的鏤空金字塔效果,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • Java實(shí)現(xiàn)象棋算法的示例代碼

    Java實(shí)現(xiàn)象棋算法的示例代碼

    象棋算法包括搜索算法、評(píng)估函數(shù)和剪枝算法,本文主要介紹了Java實(shí)現(xiàn)象棋算法的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java基礎(chǔ)教程之整數(shù)運(yùn)算

    Java基礎(chǔ)教程之整數(shù)運(yùn)算

    Java的整數(shù)運(yùn)算與C語(yǔ)言相同,遵循四則運(yùn)算規(guī)則,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之整數(shù)運(yùn)算的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯)

    十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯)

    這篇文章主要介紹了十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯),需要的朋友可以參考下
    2015-03-03
  • SpringBoot定義Bean的幾種實(shí)現(xiàn)方式

    SpringBoot定義Bean的幾種實(shí)現(xiàn)方式

    本文主要介紹了SpringBoot定義Bean的幾種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Spring MVC注解式開(kāi)發(fā)示例完整過(guò)程

    Spring MVC注解式開(kāi)發(fā)示例完整過(guò)程

    這篇文章主要介紹了Spring MVC注解式開(kāi)發(fā)示例完整過(guò)程,MVC注解式開(kāi)發(fā)即處理器基于注解的類(lèi)開(kāi)發(fā),對(duì)于每一個(gè)定義的處理器,無(wú)需在xml中注冊(cè),只需在代碼中通過(guò)對(duì)類(lèi)與方法的注解,即可完成注冊(cè)
    2023-02-02
  • JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)

    JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)

    這篇文章主要介紹了JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)的辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 解析Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載

    解析Spring Boot 如何讓你的 bean 在其他 bean&n

    在 SpringBoot 中如何讓自己的某個(gè)指定的 Bean 在其他 Bean 前完成被 Spring 加載?我聽(tīng)到這個(gè)問(wèn)題的第一反應(yīng)是,為什么會(huì)有這樣奇怪的需求?下面小編給大家分析下Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載 ,感興趣的朋友一起看看吧
    2024-01-01
  • 淺析java 10中的var關(guān)鍵字用法

    淺析java 10中的var關(guān)鍵字用法

    2018年3月20日,Oracle發(fā)布java10。java10為java帶來(lái)了很多新特性。這篇文章主要介紹了Java 10 var關(guān)鍵字詳解和示例教程,需要的朋友可以參考下
    2018-10-10

最新評(píng)論

江达县| 正定县| 岳池县| 鲜城| 长丰县| 柏乡县| 林西县| 水城县| 双牌县| 广丰县| 汽车| 永吉县| 霍山县| 峨山| 钟山县| 肃北| 远安县| 吉木乃县| 昂仁县| 靖宇县| 满洲里市| 义乌市| 赤壁市| 潼关县| 道孚县| 渭南市| 会同县| 锡林浩特市| 青川县| 老河口市| 庆云县| 弋阳县| 鄂州市| 鄱阳县| 石泉县| 浮山县| 五原县| 桂林市| 日照市| 喀喇沁旗| 康平县|