A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 班志国 中级黑马   /  2012-11-19 17:46  /  1069 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 班志国 于 2012-11-20 15:55 编辑
  1. ArrayList al = new ArrayList();
  2. al.add("java01");
  3. al.add("java02");
  4. Iterator it = al.iterator();
  5. while(it.hasNext()){
  6.      Object obj = it.iterator();
  7.       if(obj.equals("java02"));
  8.            
  9.           al.add("java08");//为什么这样就报错????????
  10. }
复制代码

5 个回复

倒序浏览
本帖最后由 惠晖 于 2012-11-19 18:10 编辑

迭代器里不可以通过集合的方法操作集合中的元素因为会发生并发修改异常
只能运用迭代器方法操作元素,因为Iterator方法是有限的 所以只能通过其子接口ListIterator 该接口只能通过List集合的listIterator方法获取
  • ArrayList al = new ArrayList();
  • al.add("java01");
  • al.add("java02");
  • Iterator it = al.iterator();这里改成ListIterator it =al.listIterator();
  • while(){
  •      Object obj = it.iterator();
  •       if(obj.equals("java02"));
  •           al.add("java08");//为什么这样就报错????????应该改成it.add("java08")}
回复 使用道具 举报

RE: 求解

你的判断条件呢?
回复 使用道具 举报
1、你的代码里,如果要用while来表示无限循环,如下所示
  1. while(true)//要加true,java和c不同
  2. {
  3.     //一些代码
  4. }
复制代码
2、你的代码错误较多,改正如下
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.ListIterator;


  4. public class Test2{
  5.         public static void main(String[] args)
  6.         {
  7.                 ArrayList al = new ArrayList();
  8.                 al.add("java01");
  9.                 al.add("java02");
  10.                 ListIterator it = al.listIterator();//使用listIterator
  11.                 while(it.hasNext()){//用it.hasNext()来防止访问到不存在的元素
  12.                      Object obj = it.next();
  13.                       if(obj.equals("java02"))
  14.                               //这个地方毕老师讲过,你不能同时既用迭代器又用ArrayList的对象来操作数组列表,同一时间只能用一种
  15.                           it.add("java08");//这样就不会报错了

  16.                 }
  17.                
  18.                 //下面检测一下
  19.                 for(Object o:al)
  20.                 {
  21.                         System.out.println((String)o);
  22.                 }
  23.         }
  24. }
复制代码
回复 使用道具 举报
惠晖 发表于 2012-11-19 17:59
迭代器里不可以通过集合的方法操作集合中的元素因为会发生并发修改异常
只能运用迭代器方法操作元素,因为I ...

Iterator中没有add方法,ListIterator中才有!
回复 使用道具 举报
ArrayList集合在迭代过程中是不允许,用集合的方法增加或删除的。。只能用迭代器的方法。
具体的API上写得很清楚:
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:
在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,
否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马