黑马程序员技术交流社区

标题: 求解,,集合 [打印本页]

作者: sunxiaohong    时间: 2015-5-9 14:39
标题: 求解,,集合
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)



//为什么会抛异常??


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

作者: sunxiaohong    时间: 2015-5-9 15:11
大兵在海边 发表于 2015-5-9 15:07
这个是“并发修改异常”。你在迭代的同时去向集合中增删元素,这时候的迭代器所属的集合就和原先的不一样了 ...

好吧,昨天的题,然后看了半天不明白怎么回事,最主要的是看不懂那个异常名,如果看懂了也能想起啊,,汗,,,,,,,,,,,,,
作者: 大兵在海边    时间: 2015-5-9 15:14
sunxiaohong 发表于 2015-5-9 15:11
好吧,昨天的题,然后看了半天不明白怎么回事,最主要的是看不懂那个异常名,如果看懂了也能想起啊,,汗,,,,,, ...

modification修改的意思
一看你就没好好和英语课代表一起读英语
作者: sunxiaohong    时间: 2015-5-9 15:19
我不是说了吗,我的英语烂到家了,,,,汗
出异常了人家可能了知道是哪儿错了,我看了是越来越懵,看不懂,等于没看一样啊

作者: 开到荼靡    时间: 2015-5-9 16:20
接3L所述。
所谓"并发异常",就是线程方面的问题。
举例: 假设你和室友一起上学,你俩一起走。这叫并行对吧?
如果你和他都同时到了教室门口,你们都进了这个教室。而此时教室里只剩一个座位了,他有座位,你没有。你来是坐着敲代码。总不能站着敲吧。(忽略人性化:例如一起坐之类的),这时候就会报错。这就叫“并发访问”。

作者: sunxiaohong    时间: 2015-5-10 21:10
谢谢,明白了
作者: 我干阿衰    时间: 2015-5-10 21:32
并发修改异常,Iterator 遍历时候不允许修改所遍历的集合。
作者: zhw634631    时间: 2015-5-10 21:39
强势围观,路人乙,,,,,




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