iterator循环到尽头

thomaswen156 2009-12-24 08:35:40
我这个循环 是个嵌套循环,但是好像每次 外面的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);

}

}
...全文
423 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
daihui05 2009-12-25
  • 打赏
  • 举报
回复

while (it2.hasNext()) {

OrgDto org2 = new OrgDto();
org2 = it1.next(); if (org.getOrgcode().equals(org2.getOrgcode())) {
flag = true;
//break;
}
改成org2 = it2.next();试下
dongyangmoney 2009-12-25
  • 打赏
  • 举报
回复
jf
thomaswen156 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sean1203 的回复:]
list=list2;
            Iterator it2 = list.iterator();
多余的
[/Quote]

这个不行 只能把 list2 进行克隆,或者将list2 的iterator 游标移动到第一个
bayougeng 2009-12-25
  • 打赏
  • 举报
回复
内层循环中有这一句:
org2 = it1.next();
我实在是没看懂。
你既然不用list2的数据,那你对它循环什么呢?
还有,到了it1的最后一条数据了,那内层中的org2 = it1.next()不就异常了么?
道光2008 2009-12-25
  • 打赏
  • 举报
回复
改为:

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);

}

}
sean1203 2009-12-24
  • 打赏
  • 举报
回复
list=list2;
Iterator it2 = list.iterator();
多余的
sean1203 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 crazylaa 的回复:]
貌似引用问题,list2是个全局变量,第一次while(it2.hasNext())就已经全部循环完了,所以第二次永远都是while(false),所以不会循环叻。
[/Quote]

里面可以不用迭代器
用for来
for里面可以指定下标循环出来
而用迭代器的话
底层把list的最后一个元素的下标记录在迭代器里面了
huizai001 2009-12-24
  • 打赏
  • 举报
回复
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 类型的直接用酒行
crazylaa 2009-12-24
  • 打赏
  • 举报
回复
貌似引用问题,list2是个全局变量,第一次while(it2.hasNext())就已经全部循环完了,所以第二次永远都是while(false),所以不会循环叻。
虽然你里面new 叻个ArrayList(),不过是个假相,马上就指向list2的内存地址叻。不知道ArrayList()有没有clone方法,clone一个。
sean1203 2009-12-24
  • 打赏
  • 举报
回复
不要好像
可以debugger的
或者在循环里面System。out。print出来数据
这2个迭代器不冲突的
结果应该是正常的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧