如题
是树还是链之类的呢?
由于不了解数据结构,有段代码不太明白呀!如下:
private void printElement(Element element) 
{
    System.out.println(element.getQualifiedName()+": "+element.getText());
    Iterator iter = element.elementIterator();
    while (iter.hasNext()) //为什么不是if?
    {
     Element sub = (Element)iter.next();
     System.out.println("属性个数是:"+sub.attributeCount());
        printElement(sub);
    }
}这段代码用来解析一个xml,我个人认为while那行把while换成if能出现同样的结果,但不是这样,所以我认为是我对Iterator的结构不了解所造成的!
请大家指点迷津!谢谢了

解决方案 »

  1.   

    看Element的源码
    j2se api里的Iterator就是迭代器,内部结构没研究过
      

  2.   

    Iterator是一个迭代器,他的结构像一个队列,把取到的东西先放到队列里面,然后用while循环判断队列里面是不是还有,如果还有元素那就取出,所以这里不能用if
      

  3.   

        while (iter.hasNext()) //为什么不是if?对于这句,我觉得你不明白的不是Iterator,而是while和if的区别,
    while是指要条件语句为真就一直会循环执做很多遍。
    而if是不会循环的,永远只可能走一遍。
    所以,如果Iterator里面不止1条数据,这两个就不能互换使用。简单理解可以认为Iterator内部有一个游标,用来指示当前位置。iter.hasNext()是判断这个Iterator里面还有没有下一条数据,即当前游标后有无数据。
    调用iter.next()会让Iterator内部的一个游标往下走一行。
      

  4.   

    楼上的说得很好,if只执行一次,while是循环
      

  5.   

    谢谢诸位的回答,非常感谢
    但是我生性驽钝,还是没有理解大家的意思。
    chalsy(白梓健) 先生说的很对,我理解的很肤浅
    其实我对这个递归函数是如何运行的还不了解
    把这个递归改为嵌套的循环的话,也许我会稍微理解点儿。
    这个递归如何改为循环呢?再次谢谢了!
      

  6.   

    public static ArrayList getArrayList(Iterator iter) {
            ArrayList records = new ArrayList();
            for(; iter.hasNext(); records.add(iter.next()));
            return records;
         }上面的方法可以把Iterator变为ArrayList