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

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

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

    隨筆 - 17  文章 - 49  trackbacks - 0
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類(17)

    隨筆檔案(17)

    相冊

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    ?
    管中窺虎

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

    ?

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

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

    ?

    ?

    2006 8 15 星期二

    第三道虎紋:自動包裝機制

    ?

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

    ?

    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 的第二個參數就是 int 類型的 1 ,這個時候就出現了自動的包裝,而如果 freq 不為空,那么 freq 1 就是自動解包后運算,再自動包裝,放入 Map 中。

    現在你基本上可以忽略 Integer int (或者這一類的對應)之間的區別了,除了要注意幾點警告: Integer 是可以為 null 的,如果程序試圖自動解包一個 null ,會拋出 NullPointerException

    ==用于 Integer 時比的是引用,用于 int 的時候比的是值。最后,還有一點就是即使現在是自動解包打包,它們的運行損耗并沒消失,你依然為這些動作付出了 cpu 的計算時間。

    ?

    這里還有一個相關的例子:

    // ?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;?}

    ????}
    ;

    }


    ?

    通過自動的包裝機制,提供了數組與 List 的靈活轉換,但是它的運行效率是比較低的,每個 get set 操作,都進行了解包或者打包,偶爾使用這個方法還湊合,如果是用于核心代碼的循環里,那就是夠傻的了。

    ?

    那我們什么時候該用自動的包裝機制呢?僅僅是用于消除這類所謂的“阻抗不匹配”,就是基本類型與包裝類的差異,例如要把數值放入容器類的時候。如果在進行科學計算的代碼或者其他講究效率的代碼中使用,則是不恰當的。一個 Integer 不是一個 int ,自動包裝機制僅僅模糊了它們的區別,而沒有消除之。

    posted on 2006-08-15 18:14 Ye Yiliang 閱讀(1699) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 可以免费观看的一级毛片| 在线观看国产区亚洲一区成人| 亚洲欧美日韩综合久久久久 | 成人免费的性色视频| 亚洲中文字幕久久精品蜜桃| 免费大片黄手机在线观看| 免费国产叼嘿视频大全网站| 中国china体内裑精亚洲日本| 亚洲欧洲久久久精品| 亚洲第一网站免费视频| 疯狂做受xxxx高潮视频免费| 国产亚洲一区二区三区在线观看 | 无码人妻精品一二三区免费| 有色视频在线观看免费高清在线直播 | 天天看片天天爽_免费播放| 一区二区三区免费在线视频 | 亚洲精品国产成人影院| 5g影院5g天天爽永久免费影院| 国产亚洲一卡2卡3卡4卡新区| 亚洲精品成人久久| 免费国产a理论片| 亚洲AV永久青草无码精品| 99精品视频在线观看免费播放| 亚洲成A∨人片在线观看无码| 国产精品久久久久免费a∨| 亚洲heyzo专区无码综合| 亚洲第一黄片大全| 野花香高清视频在线观看免费| 自怕偷自怕亚洲精品| 成人免费无码大片A毛片抽搐色欲| 亚洲国产成人久久一区二区三区| 亚洲av无码国产精品色在线看不卡| 你是我的城池营垒免费看 | 777亚洲精品乱码久久久久久| 中文字幕无码免费久久99| 精品一区二区三区免费毛片| 亚洲女初尝黑人巨高清| 免费电影在线观看网站| 国产成人高清精品免费观看| 久久亚洲AV成人无码软件| 国产无遮挡吃胸膜奶免费看|