<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評論 - 5, 引用 - 0
    數(shù)據(jù)加載中……

    自動(dòng)包裝機(jī)制

    ?
    管中窺虎

    在學(xué)習(xí)java 1.5的過程中,我使用了sun公布的tutorial,這份文檔寫的比較詳盡易明,但是對于想快速了解tiger而且具有較好java基礎(chǔ)的人來說,大篇幅的英文文檔是比較耗時(shí)間和非必需的,所以我將會(huì)歸納這份文檔的主要內(nèi)容,在保證理解的底線上,盡力減少閱讀者需要的時(shí)間。

    ?

    在以下地址可以進(jìn)入各新增語言特色介紹以及下載相關(guān)文檔(若有)。

    http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

    ?

    ?

    2006815星期二

    第三道虎紋:自動(dòng)包裝機(jī)制

    ?

    我們知道容器類不能放基本類型的,放進(jìn)放出都要先包裝和解包,所有的這些工作都是繁瑣而無聊的,它早就該有自動(dòng)機(jī)制了,終于在 1.5 里得到了實(shí)現(xiàn)。

    ?

    import ?java.util. * ;

    ?

    // ?Prints?a?frequency?table?of?the?words?on?the?command?line

    public ? class ?Frequency? {

    ???
    public ? static ? void ?main(String[]?args)? {

    ??????Map
    < String,?Integer > ?m? = ? new ?TreeMap < String,?Integer > ();

    ??????
    for ?(String?word?:?args)? {

    ??????????Integer?freq?
    = ?m.get(word);

    ??????????m.put(word,?(freq?
    == ? null ? ? ? 1 ?:?freq? + ? 1 ));

    ??????}


    ??????System.out.println(m);

    ???}


    }


    java Frequency if it is to be it is up to me to do the watusi

    {be=1, do=1, if=1, is=2, it=2, me=1, the=1, to=3, up=1, watusi=1}

    ?

    注意到 freq 如果為空,那么 put 的第二個(gè)參數(shù)就是 int 類型的 1 ,這個(gè)時(shí)候就出現(xiàn)了自動(dòng)的包裝,而如果 freq 不為空,那么 freq 1 就是自動(dòng)解包后運(yùn)算,再自動(dòng)包裝,放入 Map 中。

    現(xiàn)在你基本上可以忽略 Integer int (或者這一類的對應(yīng))之間的區(qū)別了,除了要注意幾點(diǎn)警告: Integer 是可以為 null 的,如果程序試圖自動(dòng)解包一個(gè) null ,會(huì)拋出 NullPointerException

    ==用于 Integer 時(shí)比的是引用,用于 int 的時(shí)候比的是值。最后,還有一點(diǎn)就是即使現(xiàn)在是自動(dòng)解包打包,它們的運(yùn)行損耗并沒消失,你依然為這些動(dòng)作付出了 cpu 的計(jì)算時(shí)間。

    ?

    這里還有一個(gè)相關(guān)的例子:

    // ?List?adapter?for?primitive?int?array

    public ? static ?List < Integer > ?asList( final ? int []?a)? {

    ????
    return ? new ?AbstractList < Integer > ()? {

    ????????
    public ?Integer?get( int ?i)? {? return ?a[i];?}

    ????????
    // ?Throws?NullPointerException?if?val?==?null

    ????????
    public ?Integer?set( int ?i,?Integer?val)? {

    ????????????Integer?oldVal?
    = ?a[i];

    ????????????a[i]?
    = ?val;

    ????????????
    return ?oldVal;

    ????????}


    ????????
    public ? int ?size()? {? return ?a.length;?}

    ????}
    ;

    }


    ?

    通過自動(dòng)的包裝機(jī)制,提供了數(shù)組與 List 的靈活轉(zhuǎn)換,但是它的運(yùn)行效率是比較低的,每個(gè) get set 操作,都進(jìn)行了解包或者打包,偶爾使用這個(gè)方法還湊合,如果是用于核心代碼的循環(huán)里,那就是夠傻的了。

    ?

    那我們什么時(shí)候該用自動(dòng)的包裝機(jī)制呢?僅僅是用于消除這類所謂的“阻抗不匹配”,就是基本類型與包裝類的差異,例如要把數(shù)值放入容器類的時(shí)候。如果在進(jìn)行科學(xué)計(jì)算的代碼或者其他講究效率的代碼中使用,則是不恰當(dāng)?shù)摹R粋€(gè) Integer 不是一個(gè) int ,自動(dòng)包裝機(jī)制僅僅模糊了它們的區(qū)別,而沒有消除之。

    posted on 2006-08-22 11:17 Binary 閱讀(795) 評論(0)  編輯  收藏 所屬分類: j2se

    主站蜘蛛池模板: 亚洲欧美成人综合久久久| 永久黄网站色视频免费观看| 国产亚洲视频在线播放| 国产vA免费精品高清在线观看| 亚洲国产精品狼友中文久久久| 羞羞视频在线观看免费| 亚洲亚洲人成综合网络| 一个人免费播放在线视频看片| 亚洲中文字幕无码久久2017| 久青草视频97国内免费影视| 亚洲精品高清国产一久久| 2019中文字幕在线电影免费| 亚洲精品国产第1页| 狼友av永久网站免费观看| 在线观看亚洲精品专区| 亚洲国产精品综合久久网络| 一级毛片在线播放免费| 亚洲欧洲日本精品| 亚洲XX00视频| 99re在线免费视频| 久久久久久亚洲av无码蜜芽| 亚洲AV永久青草无码精品| 成年女人免费碰碰视频| 在线免费观看伊人三级电影| 亚洲一卡2卡3卡4卡5卡6卡| 久久影视综合亚洲| 毛片基地免费视频a| 精品国产免费一区二区三区香蕉| 久久精品国产亚洲av天美18| 亚洲欧洲日产国码www| 久久亚洲综合色一区二区三区| 中国在线观看免费高清完整版| fc2免费人成在线| 亚洲熟女综合一区二区三区| 久久99国产亚洲精品观看| 波多野结衣一区二区免费视频| 欧美在线看片A免费观看| 免费人成在线观看网站| 国产免费人成视频尤勿视频 | 亚洲精品国产字幕久久不卡| 国产真实伦在线视频免费观看|