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

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

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

    隨筆-50  評論-55  文章-8  trackbacks-0

    ??????? 以前一直都用 Iterator,一直沒出現(xiàn)問題,后來當我將 Iterator 作為一個方法的參數(shù)傳進去,當Iterator 執(zhí)行循環(huán)兩次的時候問題出現(xiàn)了,第一次可以執(zhí)行,而第二次卻輸出不了值了;經(jīng)過同事提醒,原來 Iterator? 執(zhí)行循環(huán)的時候,一次執(zhí)行就到達最后的節(jié)點,若再循環(huán)一次,自然不能再從頭開始。那么有什么辦法執(zhí)行兩次或兩次以上呢,解決的辦法就是再重新生成一個新的Iterator對象。 我做了一個試驗,如下:
    import java.util.ArrayList;
    import java.util.Iterator;
    public class TestIterator {
    ?? public? TestIterator(){
    ??? ArrayList list=new ArrayList();
    ??? Integer in;
    ??? for(int i=0;i<5;i++){
    ???? in=new Integer(i+10);
    ???? list.add(in);
    ??? }
    ??? Iterator it=list.iterator();
    ??? System.out.println("(1) first time to loop.....");
    ??? System.out.println("the (1) result is.....");
    ??? while(it.hasNext()){
    ???? Integer i=(Integer)it.next();
    ???? System.out.println("(1)The value is:"+i);
    ??? }
    ??? System.out.println();
    ??? System.out.println("(2) second time to loop.....");
    ??? System.out.println("the (2) result is.....");
    ??? while(it.hasNext()){
    ???? Integer i=(Integer)it.next();
    ???? System.out.println("(2)The value is:"+i);
    ??? }
    ??? System.out.println();
    ??? System.out.println("(3) third time to loop.....");
    ??? System.out.println("when this iterator is new one...");
    ??? System.out.println("the (3) result is.....");
    ??? it=list.iterator();
    ??? while(it.hasNext()){
    ???? Integer i=(Integer)it.next();
    ???? System.out.println("(3)The value is:"+i);
    ??? }
    ?? }
    ?? public static void main(String args[]){
    ????? new? TestIterator();
    ?? }
    }
    輸出的結果:
    (1) first time to loop.....
    the (1) result is.....
    (1)The value is:10
    (1)The value is:11
    (1)The value is:12
    (1)The value is:13
    (1)The value is:14

    (2) second time to loop.....
    the (2) result is.....

    (3) third time to loop.....
    when this iterator is new one...
    the (3) result is.....
    (3)The value is:10
    (3)The value is:11
    (3)The value is:12
    (3)The value is:13
    (3)The value is:14
    可以看出,它根本不執(zhí)行第(2)個循環(huán),當重新生成一個新的Iterator對象,第(3)個方法就能輸出循環(huán)了。

    posted on 2007-09-20 11:52 蔣家狂潮 閱讀(2804) 評論(12)  編輯  收藏 所屬分類: Basic

    評論:
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 11:56 | TigerShark
    請參見Iterator模式,
    每次使用都需要創(chuàng)建一個新的Iterator。  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 12:05 | 千里冰封
    你可以用ListIterator,它可以雙向遍歷
    一般來說,Iterator都是用于遍歷的,一般一遍就可以了,如果一直都可以的話,那么它的作用也就失去了.  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 13:20 | 死循環(huán)
    受教了.....  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 13:31 | 黑盒子
    以前知道,但是從來沒有接觸過。謝謝你的例子。  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊![未登錄] 2007-09-20 16:25 | jason
    不明白你到底要干什么,你見過一個Iterator對象循環(huán)兩次的嗎?
    就拿你的例子來說,你只不過是把Iterator重新賦值,跟本就不是循環(huán)兩次,你自己都說了它是一個新的對象了,怎么還循環(huán)兩次呢????
    自己好好看看API,別把別人給誘導了  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊![未登錄] 2007-09-20 16:28 | jason
    public static void main(String[] args) {
    List list = null;
    for(int i=1;i<6;i++){
    list = new ArrayList();
    list.add(i);
    }
    Iterator it = list.iterator();
    while(it.hasNext()){
    System.out.println(it.next());
    }
    boolean result = it.hasNext();
    System.out.println(result);
    }
    自己好好看看  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 17:05 | 蔣家狂潮
    樓上的太激動了,我只不過把看到現(xiàn)象帖出來討論討論。  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-20 19:14 | Unmi
    Iterator就像ResultSet一樣,內(nèi)部有一個指針,指向上一個元素,第一次迭代完成,指針在最后一個元素
    再次迭代,向后當然走訪問不到數(shù)據(jù)了,除非把指針再移動第一個元素前同,像可回溯的記錄集那樣

    最好的,能讓你留下深刻印象的辦法就是去讀JDK的源代碼,step into.  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-09-21 10:06 | 辛科
    樓上正解!!!!  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊![未登錄] 2007-09-21 17:22 | hehe
    Iterator遍歷完了是沒有重置的。

    建議你要用,封裝一個方法出來,每次調(diào)用就可以了  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2007-12-06 16:39 | 浴雨
    這個問題我也遇到過。
    “不明白你到底要干什么,你見過一個Iterator對象循環(huán)兩次的嗎? ”
    樓上的真是少見多怪,在很多場合,在遇到要反復使用同一個對象時,
    比如把用戶對象放到session中,反復使用。Iterator也一樣,有時后把數(shù)據(jù)
    查詢出來后,在以后也許還用到。  回復  更多評論
      
    # re: 原來Iterator是這樣的,才發(fā)現(xiàn),失敗啊! 2014-11-19 16:51 | stupidJason
    代碼寫成這樣還來說樓主
    list New了5次,你想說明啥?
    看到樓主帖子還挺高興的,看到你這評論直接笑噴了@jason
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲色最新高清av网站| 亚洲欧洲第一a在线观看| 日本亚洲免费无线码| 免费看黄视频网站| 亚洲一区精品视频在线| 97在线视频免费| 91亚洲性爱在线视频| 在线看片无码永久免费视频| 亚洲Av无码一区二区二三区| 最近免费中文字幕4| 国产精品亚洲一区二区三区在线观看 | 热99re久久免费视精品频软件| 亚洲hairy多毛pics大全| 国产99视频精品免费视频7| 国产国产人免费人成成免视频| 亚洲永久无码3D动漫一区| 免费人成网站在线观看不卡| 亚洲一区中文字幕久久| 五月婷婷综合免费| 久久亚洲色WWW成人欧美| 亚洲午夜无码片在线观看影院猛| 拍拍拍无挡免费视频网站| 亚洲无线电影官网| 成年女人视频网站免费m| 有色视频在线观看免费高清在线直播| 中文字幕亚洲综合久久男男| 亚洲毛片免费视频| 麻豆亚洲AV成人无码久久精品 | 国产精品福利在线观看免费不卡| 国产v亚洲v天堂无码网站| 亚欧人成精品免费观看| 国产亚洲综合久久| 亚洲电影一区二区| 日本不卡视频免费| 免费人成在线观看网站品爱网| 最新亚洲精品国偷自产在线| 亚洲日韩中文在线精品第一| 亚洲成人在线免费观看| 黄色一级毛片免费看| 91嫩草私人成人亚洲影院| 免费a级毛片无码av|