Iterator iterator = list.iterator();
while(iterator.hasNext()){
int a = (Integer)iterator.next();
list.remove(Integer.valueOf(a));
if(iterator.hasNext()){
int b = (Integer)iterator.next();
list.remove(Integer.valueOf(b));
list.add(a+b);
iterator = null;
System.gc();
iterator = list.iterator();
}
}
此时 异常信息如下:java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
百思不得其解 改正代码如下:while(iterator.hasNext()){
int a = (Integer)iterator.next();
if(iterator.hasNext()){
Integer b = (Integer)iterator.next();
list.remove(Integer.valueOf(a));
list.remove(Integer.valueOf(b));
list.add(a+b);
iterator = null;
System.gc();
iterator = list.iterator();
}
}
运行代码,正确无误。
两端代码唯一不同之处,在于从list中移除a的时机。
第一段代码在iterator第二次迭代之前调用list.remove()
而第二段代码在iterator第二次迭代之后统一调用list.remove()方法。
由此总结出来,估计是list的改变导致了iterator.next()方法找不准位置。
3
顶
0
踩
分享到:
2009-12-11 21:59
浏览 24390
评论
4 楼
billyyuan
2014-03-08
a542550187 写道
billyyuan 写道
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();
推荐用iterator的remove方法,书上这么说的
是的,我指出他的错误。
3 楼
a542550187
2014-02-24
billyyuan 写道
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();
推荐用iterator的remove方法,书上这么说的
2 楼
billyyuan
2013-02-05
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();
1 楼
urfriend
2012-09-07
两端代码唯一不同之处,在于从list中移除a的时机。
list中删了最后一个元素,iterator(hasNext)不知道,但是取值的时候(iterator.next())找不到就错了