Java的Iterator只能next():Object, hasnext():boolean, remove():void哦?如果我想先取得iterator当前指向的值,该怎么办?在C++里,直接用*it就可以了,在Java里,怎么办?不要告诉我在next()之前,先存储之前的值哦……

解决方案 »

  1.   

    ArrayList al = new ArrayList();
    al.add("Hello");

    Iterator iter = al.iterator();

    String v = (String)iter.next();这个例子可以说明问题。
      

  2.   

    ArrayList al = new ArrayList();
    al.add("Hello");

    Iterator iter = al.iterator();

    String v = (String)iter.next();这个例子可以说明问题。===================上面这个例子不正确. ArrayList al = new ArrayList();
    al.add("Hello");

    Iterator iter = al.iterator();

                      while (iter.hasNext()) {                添加
    String v = (String)iter.next();
                      }
      

  3.   

    对,我写得很不严谨,猫猫写得对了。关键是给他解释*iter的问题,但是又怕很多javaer不知道。
      

  4.   

    晕哦,这就结贴了?只是,你们的例子,似乎没有解释我想知道的东西……我是想说,C++中的迭代器可以直接使用*iter就得到迭代器所指向的当前值,而,你们的例子中使用的it.next()得到的什么?是迭代器当前指向的么?应该是迭代器先"++",然后再取"++"后的值吧?举个例子,对于"1,3,4",那么对于it指向"3"时,我只能通过it.next()得到“4”,对吧?如果我想得到“3”,怎么办?难道只能在it指向"1"里,使用it.next()得到么?但是,在C++里,it指向3时,直接使用*it就可以得到“3”。呵呵,我想,这下说清楚了吧?还请两位高手指教!问题的分不多,但不会乱给,嘿嘿~~~
      

  5.   

    好,我来给你解释,但是我要所有的分。*iter
    在C++里,通常是重载了*号的。返回一个对象的引用。比如说vector的源码 
    reference operator*() const;这样重载了iterator的*。
    而Java里呢,
    我们知道每一个类都是Object的派生类。那么我们给出的例子中的String,也是
    String对象(任何对象)会以Object ,这个叫什么CAST,上下我记不清了,传出来。
    但是实际上就是String对象。这个你得看java vm的源码什么的,(我看过一点caffee的)。
    其实就是那么一回事情。
      

  6.   

    你得先了解JAVA迭代器的用法、再了解JAVA里的迭代器为什么这样用:
    JAVA迭代器的指向指的不是集合里的数据元素位置,而是元素之间的位置,所以从0开始,也就是说iter.next()得到的就是你要的元素,不必被方法名迷惑。
    JAVA迭代器都是基于某个集合的,一般就是用于遍历用的,要求随意取元素的话就直接用集合对象按照元素位置取就是了,不必建迭代器。
      

  7.   

    呵呵,我想SINCE1978(红杉树) 似乎更理解了我的问题。其中,
    “JAVA迭代器的指向指的不是集合里的数据元素位置,而是元素之间的位置,所以从0开始,也就是说iter.next()得到的就是你要的元素,不必被方法名迷惑。”这句话,让我感兴趣。healer_kx兄,也谢谢你的解答,讲的非常详细。只不过,你说的这些我都知道。而且,在我的问题里并不是想主要讨论Object与其子类cast的问题。呵呵,以后有了其它问题,还请healer_kx兄帮帮指教,毕竟5个三角号哦……呵呵。实际上,可能是怪我没有表达清楚,如果问成“Java和C++里的迭代器的区别”可能更准确一些。不管怎么说,SINCE1978兄的答案让我感到自己对于Java迭代器的认识还不够,不管你说的这些是否正确,我想我都要仔细研究Java里的迭代器。多谢两位老兄,暂时不结贴,因为,我还没有得到让我非常满意的答案,呵呵,不好意思……
      

  8.   

    java和C的it不太一样
    c的it是指针
    java的it直接就是个引用所以你可以直接把java的it强制转换成其他类型
    String test = (String)it.next();
      

  9.   

    呵呵,引用是什么?引用说到底也是指针,当初,JAVA宣称不用指针,被很多人置疑,最后不也放松口气了么?只不过,比C++里的指针更安全而已.但是,为什么C++里it,可以直接得到它所指向的元素的值,而JAVA里的it就不行,却只能用it.next()的形式得到它所指向的下一个元素的值?所以,还是不结贴……
      

  10.   

    zhang19811027兄弟,就不要在这儿瞎晃了,成天卖这些玩意,烦不烦啊?