老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

Java位域的示例分析

這篇文章主要介紹Java位域的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

站在用戶的角度思考問題,與客戶深入溝通,找到江達(dá)網(wǎng)站設(shè)計(jì)與江達(dá)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋江達(dá)地區(qū)。

這個(gè)概念是在 Effective Java中了解到的, 可以通過EnumSet來代替位域這種方式表達(dá).并不是很常見的概念, 因此記錄下.如果在這之前恰好了解過 bitmap這種數(shù)據(jù)結(jié)構(gòu)就更好了。不了解也沒有關(guān)系。

bitmap 就是用bit的每一位來代表一個(gè)特殊的狀態(tài)值,或者說標(biāo)簽屬性等等.舉例來說, 8位的數(shù)值, 用 0000 0001 代表 北, 0000 0010 代表南, 0000 0100 代表西 依次類推.

那么當(dāng)我們拿到一串bit, 如:0100 0000 自然可以去對(duì)應(yīng)的映射關(guān)系表中查找到 究竟是屬于哪一種類型, 如果我們想同時(shí)傳遞兩個(gè)數(shù)值呢?

只需要 0000 0011 這樣就可以表示 北 南 兩個(gè)方向了, 當(dāng)然 至多可以表示 8個(gè)方向.

我們來試試這種表示方式:

public class Direction {
  public static final short NORTH = 1;
  public static final short SOUTH = 1 << 2;
  public static final short WEST = 1 << 3;
  public static final short EAST = 1 << 4;
  public static final short SOUTH_EAST = 1 << 8;
}

在這里我只是簡(jiǎn)略的定義了其中5中.

那么可能會(huì)有一個(gè)問題, 既然使用 short來表示, 為什么不用 1 2 3 ... 8 來表示數(shù)據(jù)呢? 這樣我們甚至都不需要2 的 8次方, 只需要 3位就能夠表示所有數(shù)據(jù)了.

但是不妨讓我們?cè)賮硐胍幌? 在使用 1 ~ 8 的方式中如何同時(shí)傳入多種狀態(tài)呢?

在這里是不是必須使用 一個(gè) short[] 去接收數(shù)據(jù)?

那么用位有什么好處呢?

void array(NORTH | SOUTH | SOUTH_EAST)

在方法的調(diào)用上 可以采用這種直觀易懂且計(jì)算速度快的方式, 而在傳入值 不難發(fā)現(xiàn) 最終只有一個(gè)值:

1000 0011

這一個(gè)數(shù)值即表示了包含了相應(yīng)的三種狀態(tài).而這就是 java中 位域的使用方式.那么進(jìn)一步來看, 當(dāng)我們不再滿足 8位 甚至需要更多種狀態(tài)值的時(shí)候 可以切換到 int long 甚至于 bitmap. 接收無限位。

但僅僅是位域這種表示 我們僅僅支持 64種以下的狀態(tài)類型, 因?yàn)?java種最長(zhǎng)的基本類型 也就只有64位了。

那么繼續(xù)來看看這種位域有什么缺陷呢?

使用int 類型 或 long類型, 沒有辦法加入一些自定義的東西, 通常情況下 在這種地方使用枚舉是更好地選擇。

否則的話所有的地方依然要使用 switch判斷的方式, 另外由于 int定義為 static final 時(shí) 本身就是編譯時(shí)常量,

如果有人依賴他, 將來即使這里的數(shù)值更新了, 比如刪掉兩三個(gè), 即使不重新編譯, 對(duì)方的class文件依然不會(huì)出錯(cuò)。 但事實(shí)上, 出錯(cuò)是一種必然。

就上面的例子來說, 我們想要返回所有的String 該怎么辦?必然是 switch case return "南" 類似的方式.

那么切換成枚舉類型呢?

public enum EnumDirection {
  NORTH("north"), EAST("east"), SOUTH("south"), WEST("south");
  private final String name;
  private EnumDirection(String name) {
    this.name = name;
  }
  public String getName() {
    return this.name;
  }
}

枚舉類型的好處,不再贅述。

那與今天的主題, 位域有什么關(guān)系呢?我們知道,位域的優(yōu)點(diǎn) 占用內(nèi)存小, 表示方便, 傳遞值方便, 性能高.EnumSet, 讓我抄一段描述:

這個(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來表示,因此它的性能比的上位域的性能。批處理,如removeAll和retainAll,都是利用位算法來實(shí)現(xiàn)的。就像手工替代位域?qū)崿F(xiàn)得那樣。

是的, 是位運(yùn)算.

就看一段代碼:

public boolean contains(Object e) {
  if (e == null)
    return false;
  Class eClass = e.getClass();
  if (eClass != elementType && eClass.getSuperclass() != elementType)
    return false;
  return (elements & (1L << ((Enum)e).ordinal())) != 0;
}

我們關(guān)注到最后一行, 如上述EnumDirection, WEST 的 ordinal() 即是4, 也就意味著 它值在這里被理解為 1 << 4

而通過 elements 傳入enumSet 的集合, 如:

EnumSet enumSet = EnumSet.of(EnumDirection.EAST, EnumDirection.NORTH);

不難獲知 enumSet 的 elements值為 0000 0011 當(dāng)然 這里是 long類型, 我只寫了最后8位, 而

0000 0011 & 0000 1000 必然是等于 0的 因此 contains 返回false.

這是極其高效的方式. 而目的也正在于解決 int型 位域的種種弊端.

以上是“Java位域的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文名稱:Java位域的示例分析
鏈接URL:http://www.xueling.net.cn/article/gpojih.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 国产真实乱在线更新 | 欧美亚洲综合一区 | 国产精品福利在线播放 | 亚洲国产无线乱码在线观看 | 国产精品久久久久久亚洲美女高潮 | 亚洲特黄 | 福利网址在线观看 | 欧美丰满熟妇XXXX性多毛 | 国产美女无遮挡裸色视频 | 国产欧美精品一区二区三区四区 | 国产成人啪精品视频免费网站 | 亚洲AV无码国产精品久久 | 四月是你的谎言动漫免费观看 | 久久成人综合视频 | 日本免费极度色诱福利视频 | 一区二区三区在线播放视频 | 色呦呦官网 | 国产卡一卡2卡三卡免费视频 | 日韩一级黄 | 91大神xh98xh系列全部 | 国产精品99久久精品爆乳 | 国产精品72 | 性色欲网站人妻丰满中文久久不卡 | 日韩欧美一区二区久久婷婷 | 青青草手机在线视频 | 九九九九久久久久 | www.国产区 | 宅男深夜国产 | 黄网站欧美内射 | 午夜看片网址 | 中文字幕综合 | 狠狠综合久久久久综合网址 | 韩国三级丰满40少妇高潮 | 国产www在线 | 成人免费观看黄a大片夜月小说 | 亚洲a色| 狠狠躁夜夜躁人人爽天天不卡软件 | 国产日产亚洲系列最新 | 制服诱惑一区 | 久久国产精品久久久久久 | 国产一级片免费在线观看 |