解决方案 »

  1.   

    还是增加和删除没有完全对应创建Iterator时每次都是新建 这样三个TestIterator就有三个iterStack 打印了mno后删除,但是在第二个TestIterator的iterstack中还是存在
      

  2.   


    第二个iterator在栈里面没有被删除?那是不是stack.pop的判定条件不应该仅仅只是iter.next()为空么?感觉上逻辑应该没错。。试了好多次了。。
      

  3.   

    好像是加了两次,mno存在于两处可以调试看下换成最简单的
    Persons p1 = new Persons("a");
    Persons p2 = new Persons("b");
    Persons p3 = new Persons("c");
     
    Persons pall = new Persons("all persons");
    pall.add(p1);
    p1.add(p2);
    p2.add(p3);
      

  4.   

    试试延展到4层,让p3.add(p4);结果更要夸张一点a
    b
    c
    d
    d
    c
    d
    d
    d
      

  5.   

    他这里的递归不是树结构一般用的递归,你看他没创建一个composite iteraotor里面都还得创建一个stack,我一直觉得很奇怪,但是尝试了把stack设为静态单例,就会stack overflow会无限递归一个composite iterator,永不返回false他看上去就像是个完全利用栈来实现的遍历算法,栈里面存放每一层person的iterator,iterator本身又通过递归查看是否存在子项凌乱了。
      

  6.   

    静态化后我也试过,当iterStack含有如下元素时,就开始进入递归死循环了[java.util.AbstractList$Itr@d6c16c, java.util.AbstractList$Itr@95c083, TestIterator@191d8c1]public boolean hasNext() {
        
            if(iterStack.isEmpty()){
                return false;
            }
            Iterator<Persons> iter = iterStack.peek();
            if(iter.hasNext()){
                return true;
            }else{
                iterStack.remove(iter);
                return hasNext();
            }
        }
    此时的iter=TestIterator@191d8c1,通过iter.hasNext()进入递归死圈
    非静态时,递归下层由于是另一个Stack实例,所含内容不同,所以没进入死循环我想他启用Stack的初衷应该是存储某节点下所有composite iterator,但不知道为什么实现差了
      

  7.   

    确实,这段代码的思想是看懂了,但是实现就错了。应该就是hasNext的逻辑出了问题,不过就是想不出来哪里没写对next函数肯定不会有错
      

  8.   

    我也遇到这样的问题,通过迭代器组合模式遍历树,就进入死循环了。原因可能是没有把stack的东西合理出栈。