我这个循环 是个嵌套循环,但是好像每次 外面的while做了一次虚幻后里面的那个循环就只做了一次,不能不能重复循环,不知道为什么,请高手指点
Iterator<OrgDto> it1 = list1.iterator();


while (it1.hasNext()) {
OrgDto org = new OrgDto();
org = it1.next();
flag = false;
List list=new ArrayList();
list=list2;
Iterator it2 = list.iterator();
it2=list2.iterator();
while (it2.hasNext()) {

OrgDto org2 = new OrgDto();
org2 = it1.next(); if (org.getOrgcode().equals(org2.getOrgcode())) {
flag = true;
//break;
}

}
System.out.println("==内循环2===" +  "=="+ org.getOrgcode() + flag);
if (!flag) {
result.add(org); } }

解决方案 »

  1.   

    不要好像
    可以debugger的
    或者在循环里面System。out。print出来数据
    这2个迭代器不冲突的
    结果应该是正常的
      

  2.   

    貌似引用问题,list2是个全局变量,第一次while(it2.hasNext())就已经全部循环完了,所以第二次永远都是while(false),所以不会循环叻。
    虽然你里面new 叻个ArrayList(),不过是个假相,马上就指向list2的内存地址叻。不知道ArrayList()有没有clone方法,clone一个。
      

  3.   

    Iterator it1 = list1.iterator(); 
        while (it1.hasNext()) {
           OrgDto org = (OrgDto)it1.next();
           flag = false;
           Iterator it2 = list2.iterator();
           while (it2.hasNext()) {
               OrgDto org2 = (OrgDto)it1.next();
               if (org.getOrgcode().equals(org2.getOrgcode())) {
                   flag = true;
                   //break;
               } 
           }
           System.out.println("==内循环2===" +  "=="+ org.getOrgcode() + flag);
           if (!flag) {
               result.add(org);
           }
       }
    // list2 既然是ArrayList 类型的直接用酒行  
      

  4.   


    里面可以不用迭代器
    用for来
    for里面可以指定下标循环出来
    而用迭代器的话
    底层把list的最后一个元素的下标记录在迭代器里面了
      

  5.   

    list=list2;
                Iterator it2 = list.iterator();
    多余的
      

  6.   

    改为:Iterator<OrgDto> it1 = list1.iterator();
                
            
            while (it1.hasNext()) {
                OrgDto org = new OrgDto();
                org = it1.next();
                flag = false;
               
               Iterator it2 = list2.iterator();     
                while (it2.hasNext()) {
                    
                    OrgDto org2 = new OrgDto();
                    org2 = it1.next();                if (org.getOrgcode().equals(org2.getOrgcode())) {
                        flag = true;
                    }
                    
                }
                System.out.println("==内循环2===" +  "=="+ org.getOrgcode() + flag);
                if (!flag) {
                    result.add(org);            }        }
      

  7.   

    内层循环中有这一句:
    org2 = it1.next(); 
    我实在是没看懂。
    你既然不用list2的数据,那你对它循环什么呢?
    还有,到了it1的最后一条数据了,那内层中的org2 = it1.next()不就异常了么?
      

  8.   


    这个不行  只能把 list2 进行克隆,或者将list2 的iterator 游标移动到第一个
      

  9.   


    while (it2.hasNext()) {
                    
                    OrgDto org2 = new OrgDto();
                    org2 = it1.next();                if (org.getOrgcode().equals(org2.getOrgcode())) {
                        flag = true;
                        //break;
                    }
    改成org2 = it2.next();试下