黑马程序员技术交流社区
标题:
迭代器并发修改异常问题!!!
[打印本页]
作者:
聂益飞
时间:
2013-3-27 16:00
标题:
迭代器并发修改异常问题!!!
import java.util.List;
import java.util.ListIterator;
public class Demo {
public static void main(String[] args) {
List list= new ArrayList();
list.add("天天");
list.add("怪物");
list.add("12345");
ListIterator it =list.listIterator();
/*并发修改异常发生的原因是在迭代中集合添加了元素,但没通知迭代器
* 在处理并发修改异常时候,不想用原来的2种方式.而是在迭代中从新迭代
* 但是却抛出了超出错误:OutOfMemoryError
* 这个是怎么超出内存的啊?如何解决?是否不能在迭代中从新迭代啊?
*/
while(it.hasNext())
{
String s=(String)it.next();
if("天天".equals(s))
{
list.add("8888888");
/*
* 在迭代中从新迭代
*/
it =list.listIterator();
}
}
System.out.println(list);
}
}
复制代码
作者:
itserious
时间:
2013-3-27 16:28
你那都变成死循环了。
每当遍历到 “天天”的时候,你就会向集合中添加一个新的元素。list.add("8888888");
然后你又创建一个新的迭代器,又从集合用第一个元素,开始遍历。当遍历到 “天天”的时候,
你又会向集合中添加一个新的元素。list.add("8888888");然后你又创建一个新的迭代器,
又从集合用第一个元素,开始遍历。
这样一直循环下去,集合中的元素不断增加,虽然你的集合是可变长度的,但JVM给你的集合分配的可用空间是有限的。
你一直向集合中添加元素,当JVM给你的集合分配的最大空间用完了后,
必然就会内存溢出了。
作者:
kaka小明
时间:
2013-4-24 23:03
楼上正解 list.add("8888888")改成it.add("8888888")试下,去掉死循环的那句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2