z_xiaojie
z_xiaojie
采纳率100%
2015-02-03 09:01

List add() iterator同时遍历报错或者结果不对

已采纳

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;

public class DiGuiTest {
public static void main(String[] args) {

    List<OrgDto> list = new ArrayList<OrgDto>();
    OrgDto dto1 = new OrgDto();
    dto1.setOrgId(10l);
    dto1.setSupOrgId(3l);
    dto1.setOrgName("10部门");
    list.add(dto1);

    OrgDto dto2 = new OrgDto();
    dto2.setOrgId(12l);
    dto2.setSupOrgId(10l);
    dto2.setOrgName("12部门");
    list.add(dto2);

    OrgDto dto3 = new OrgDto();
    dto3.setOrgId(13l);
    dto3.setSupOrgId(12l);
    dto3.setOrgName("13部门");
    list.add(dto3);

    Long a = 3l;
    List<Long> supList = new CopyOnWriteArrayList<Long>();
    supList.add(a);
    List<String> nameList = new ArrayList<String>();

    Iterator<Long> iterator = supList.iterator();

    while (iterator.hasNext()) {
        Long s = Long.parseLong(iterator.next().toString());
        for (OrgDto o : list) {
            if (o.getOrgId().equals(s)) {
                nameList.add(o.getOrgName().trim());
            } else if (o.getSupOrgId().equals(s)) {
                nameList.add(o.getOrgName().trim());
                supList.add(o.getOrgId());
            }
        }
    }

    for (String n : nameList) {
        System.out.println(n);
    }
}

}

想要实现的是 能够输出10部门及其所有子部门的部门名称,即10部门、12部门、13部门

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • danielinbiti danielinbiti 6年前
     while (iterator.hasNext()) {改成用for(int i=0;i<supList.size();i++){
    
    点赞 1 评论 复制链接分享
  • freedamjustice freedamjustice 6年前

    java认为在迭代过程中,容器应当保持不变。因此,java容器中通常保留了一个域称为modCount,每次你对容器修改,这个值就会加1。当你调用iterator方法时,返回的迭代器会记住当前的modCount,随后迭代过程中会检查这个值,一旦发现这个值发生变化,就说明你对容器做了修改,就会抛异常。

    点赞 评论 复制链接分享

相关推荐