黑马程序员技术交流社区

标题: arraylist集合 处理 [打印本页]

作者: 颜春    时间: 2013-2-27 21:23
标题: arraylist集合 处理
ArrayList<String> list = new ArrayList<String>();
                  list.add("123");
                  list.add("456");
                  list.add("789");
                  list.add("963");
                  int i=0;
                  for ( String st : list) {  
                       
                      if (st.equals("123")) {  
                             
                          list.remove(st);
                     }  
                      System.out.println(list.get(i)+ " ");  
                      i++;
                  }
为什么会报java.util.ConcurrentModificationException  异常   求解
作者: 陈圳    时间: 2013-2-27 21:34
并发修改异常
ArrayList是不同步的.这与在迭代中操作add一样,你在用list取出方法,你同时又在里面改他的元素,导致他不知道自己现在有多少个要出取了.
作者: 张豪杰    时间: 2013-2-27 21:44
这个异常是说,你不能在对一个List进行遍历的时候将其中的元素删除掉
  1.            ArrayList<String> list = new ArrayList<String>();
  2.                   list.add("123");
  3.                   list.add("456");
  4.                   list.add("789");
  5.                   list.add("963");
  6.                   int i=0;
  7.                   for ( String st : list) {  
  8.                        
  9.                       if (st.equals("123")) {  //你这个循环是在遍历list集合,但是遍历过程中又要删除里面的元素,所以就报错了
  10.                              
  11.                           list.remove(st);
  12.                      }  
  13.                       System.out.println(list.get(i)+ " ");  
  14.                       i++;
复制代码
你可以定义一个集合来收集要删除的字符串,等遍历完后再进行删除
  1.            ArrayList<String> list = new ArrayList<String>();
  2.                    ArrayList<String> Dellist = new ArrayList<String>();//在这里定义个集合,用于收集你要删除的元素,等遍历结束后再对收集的元素删除

  3.                   list.add("123");
  4.                   list.add("456");
  5.                   list.add("789");
  6.                   list.add("963");
  7.                
  8.                                   int i = 0;
  9.                
  10.                   for ( String st : list) {  
  11.                        
  12.                       if (st.equals("123")) {
  13.                           Dellist.add(st);   
  14.                          i++;
  15.                      }
  16.                                          }
  17.                                           list.removeAll(Dellist);  //这里用removeAll,是因为不确定要删除的集合里的元素有多少个!
  18.                       System.out.println(list.get(i)+ " ");
复制代码

作者: 舒远    时间: 2013-2-27 21:46
集合迭代过程中如果要对集合本身做添加,删除等操作。请不要用普通的遍历方式,而应使用Iterator迭代器来操作。
作者: Benwolf0818    时间: 2013-2-27 22:32
可否理解为问题的根源在ArrayList是动态数组造成的计数混乱?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2