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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunxiaohong 中级黑马   /  2015-5-9 14:39  /  468 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList al = new ArrayList();
  al.add(“a”);
  al.add(“b”);
  al.add(“c”);
  Iterator it = al.iterator();
  while(it.hasNext()){
String s = (String)it.next();
if(s.equals(“c”)){
al.add(“c1”);
}
}
System.out.println(al)



//为什么会抛异常??

10 个回复

倒序浏览
Iterator 遍历时候不允许修改所遍历的集合。。。异常是出现在it.next();所以这么看的话是循环第二次,it.next()时候是发现原来集合已经被修改了。所以就抛异常了。
回复 使用道具 举报
那个while的死循环太大了,把后面的与c比较的程序判断都给覆盖了
回复 使用道具 举报
这个是“并发修改异常”。你在迭代的同时去向集合中增删元素,这时候的迭代器所属的集合就和原先的不一样了,所以就抛异常。如果想在迭代遍历的同时添加元素,你可以使用
ListIterator it=ai.listIterator();
while(it.hasNext()){
     String s = (String)it.next();
     if(s.equals(“c”)){
        it.add(“c1”);
}
}
因为只有List特有的迭代器具有add()方法
回复 使用道具 举报
大兵在海边 发表于 2015-5-9 15:07
这个是“并发修改异常”。你在迭代的同时去向集合中增删元素,这时候的迭代器所属的集合就和原先的不一样了 ...

好吧,昨天的题,然后看了半天不明白怎么回事,最主要的是看不懂那个异常名,如果看懂了也能想起啊,,汗,,,,,,,,,,,,,
回复 使用道具 举报
sunxiaohong 发表于 2015-5-9 15:11
好吧,昨天的题,然后看了半天不明白怎么回事,最主要的是看不懂那个异常名,如果看懂了也能想起啊,,汗,,,,,, ...

modification修改的意思
一看你就没好好和英语课代表一起读英语
回复 使用道具 举报
我不是说了吗,我的英语烂到家了,,,,汗
出异常了人家可能了知道是哪儿错了,我看了是越来越懵,看不懂,等于没看一样啊
回复 使用道具 举报
接3L所述。
所谓"并发异常",就是线程方面的问题。
举例: 假设你和室友一起上学,你俩一起走。这叫并行对吧?
如果你和他都同时到了教室门口,你们都进了这个教室。而此时教室里只剩一个座位了,他有座位,你没有。你来是坐着敲代码。总不能站着敲吧。(忽略人性化:例如一起坐之类的),这时候就会报错。这就叫“并发访问”。
回复 使用道具 举报
谢谢,明白了
回复 使用道具 举报
并发修改异常,Iterator 遍历时候不允许修改所遍历的集合。
回复 使用道具 举报
强势围观,路人乙,,,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马