<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)

    相冊(cè)

    最新隨筆

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    2006 8 15 星期二

    管中窺虎

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

    ?

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

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

    ?

    第二道虎紋: For-Each 循環(huán)

    目前在一個(gè)容器里做迭代訪問挺郁悶的,看看下面這個(gè)方法,方法的目的是把容器里的一系列計(jì)時(shí)任務(wù)取消。

    void ?cancelAll(Collection < TimerTask > ?c)? {

    ????
    for ?(Iterator < TimerTask > ?i? = ?c.iterator();?i.hasNext();?)

    ????????i.next().cancel();

    }

    關(guān)于

    Iterator 的部分真的很羅嗦,而且容易出錯(cuò)?,F(xiàn)在再看看 1.5 里帶來的 For-each 循環(huán):

    void ?cancelAll(Collection < TimerTask > ?c)?{

    ????
    for ?(TimerTask?t?:?c)

    ????????t.cancel();

    }

    這個(gè)新的循環(huán)和泛型完美配合,既保持類型安全,又去掉了冗余。

    以下是一個(gè)在試圖嵌套迭代的時(shí)候經(jīng)常會(huì)犯的錯(cuò)誤。

    List?suits? = ?;

    List?ranks?
    = ?;

    List?sortedDeck?
    = ? new ?ArrayList();

    ?

    // ?BROKEN?-?throws?NoSuchElementException!

    for ?(Iterator?i? = ?suits.iterator();?i.hasNext();?)

    ????
    for ?(Iterator?j? = ?ranks.iterator();?j.hasNext();?)

    ????????sortedDeck.add(
    new ?Card(i.next(),?j.next()));

    ?

    原因是 i.next() 被過多的調(diào)用了。

    再看看新循環(huán)的表現(xiàn),簡(jiǎn)直是度身定造一樣的般配。

    for ?(Suit?suit?:?suits)

    ????
    for ?(Rank?rank?:?ranks)

    ????????sortedDeck.add(
    new ?Card(suit,?rank));

    ?

    for-each 循環(huán)也適用于數(shù)組,象隱藏迭代子一樣,這次它把數(shù)組下標(biāo)藏起來了。

    // ?Returns?the?sum?of?the?elements?of?a

    int ?sum( int []?a)? {

    ????
    int ?result? = ? 0 ;

    ????
    for ?( int ?i?:?a)

    ????????result?
    += ?i;

    ????
    return ?result;

    }

    ?

    那么我們什么時(shí)候該用 for-each 循環(huán)呢?只要情況運(yùn)行就應(yīng)該用,它真的讓你的代碼好看了很多。不幸的是,它有不能發(fā)揮作用的情形,就是需要用 iterator remove 方法的時(shí)候,因?yàn)?/span> iterator 被隱藏了,你也無法調(diào)用它的方法了,新的循環(huán)不適用于過濾元素。同樣的也不適用于需要把數(shù)組中的元素替換掉的情況。最后,它也不能在平行遍歷多個(gè)容器的情況里使用,這些缺點(diǎn),設(shè)計(jì)者是知道的,但是最后他們明智地選擇這樣一個(gè)簡(jiǎn)單的,能適用于多數(shù)情況的設(shè)計(jì)方案

    posted on 2006-08-15 18:06 Ye Yiliang 閱讀(2485) 評(píng)論(8)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-15 20:06 hsp
    僅用于LOOP做讀操作時(shí),我喜歡foreach
    可惜它性能比不上普通for  回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-15 20:15 Ye Yiliang
    關(guān)于性能差異,愿聞其詳,有勞講解@hsp
      回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-16 09:43 GoKu
    在.net上用foreach比for要快, java上不清楚會(huì)不會(huì)快  回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-17 10:57 hsp
    看數(shù)組還是鏈表.
    index與iterate的關(guān)系

    在c#1.0時(shí),foreach在數(shù)組操作上的確比for慢(主要是數(shù)組的固定長(zhǎng)度,編譯器優(yōu)化使用內(nèi)聯(lián)的對(duì)象記住該長(zhǎng)度,并且不做任何越界檢測(cè)).
    因此當(dāng)時(shí)我也不太用.

    后期版本的編譯器做了優(yōu)化.
    在數(shù)組時(shí),foreach編譯成普通for
    在鏈表時(shí),(類型提供了迭代器)foreach編譯成使用迭代器.如果使用for利用索引當(dāng)然會(huì)慢.

    但在使用時(shí)候,foreach還要看具體迭代器本身實(shí)現(xiàn)的效率.  回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-17 11:10 yeyiliang
    不知道java的編譯器在這個(gè)方面有沒有做類似的優(yōu)化:)@hsp
      回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-17 14:53 hsp
    都出到1.5,我林肯定有的..  回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-17 17:52 海藍(lán)
    @GoKu
    在.NET中foreach不比for快吧?據(jù)我了解,foreach編譯后的代碼與for是一樣的  回復(fù)  更多評(píng)論
      
    # re: 第二道虎紋:For-Each 循環(huán) 2006-08-18 13:52 GoKu
    http://topic.csdn.net/t/20051230/11/4490365.html

    這里有討論

    我記得在哪本書上也說過多數(shù)情況下foreach速度比較快,所以在.net中能foreach就盡量用  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 久久久久亚洲精品男人的天堂| 疯狂做受xxxx高潮视频免费| 亚洲男人在线无码视频| 久久这里只有精品国产免费10| 久久精品无码专区免费| 精品亚洲成a人在线观看| 精品亚洲成在人线AV无码| 亚洲欧洲在线观看| 亚洲中文字幕日产乱码高清app| 国产v片免费播放| 免费看美女被靠到爽| 免费观看的毛片大全| 91久久精品国产免费一区| 成人A毛片免费观看网站| 日韩大片免费观看视频播放| 亚洲综合av一区二区三区 | 国产成人精品久久亚洲高清不卡 | jizz在线免费播放| 国产亚洲精品美女久久久久| 亚洲中文字幕无码mv| 精品亚洲成在人线AV无码| 亚洲成人福利在线观看| 亚洲精品无码久久久久久久| 久久亚洲精品中文字幕| 久久久久无码精品亚洲日韩| 亚洲国产成人片在线观看无码| 亚洲综合色成在线播放| 亚洲一区二区精品视频| 亚洲精品视频在线观看你懂的| 亚洲AV之男人的天堂| 国产免费无遮挡精品视频| 国产成人免费一区二区三区| 日本一道在线日本一道高清不卡免费| 黄页免费的网站勿入免费直接进入| 6080午夜一级毛片免费看6080夜福利| 国产精品免费福利久久| 无码A级毛片免费视频内谢| 久久伊人免费视频| 91视频免费网址| 在线永久免费的视频草莓| 久久精品a一国产成人免费网站 |