返回信息流运行如下一段代码时,
public boolean increment() throws TokenizerException{
// TODO:
if(currentTokenStream!=null && currentTokenStream.hasNext()) {
currentToken = currentTokenStream.next();
return true;
}
return false;
}
出现了一个异常:
/* Problem */
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at ourproj.analysis.TokenStream.next(TokenStream.java:55)
at ourproj.analysis.TokenFilter.increment(TokenFilter.java:43)
在那个stream中,我们封装了一下迭代器,方法是:
public Token next() {
// TODO YOU MUST IMPLEMENT THIS
if(listIterator.hasNext()) {
current = listIterator.next();
return current;
}
else {
// TODO: The bug lies here.
return null;
}
}
一般而言,ConcurrentModificationException应该只是增删时才会出现,我这里没有对list进行增删。
求问各位,这是怎么回事呢?
这是一条镜像帖。来源:北邮人论坛 / java / #34974同步于 2014/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于ConcurrentModificationException
ht0601052726
2014/9/26镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
在list数据确定了的时候再调用listIterator = list.iterator()
比如说不能list = new ArrayList()后紧接着listIterator = list.iterator()
必需list = new ArrayList(),然后填数据,再然后listIterator = list.iterator()来遍历,且遍历过程中数据不能发生改变
其实并没有,list = new ArrayList()后紧接着listIterator = list.iterator()。
我是通过list=XXlist;的方式初始化的,而后紧接着listIterator = list.iterator()。
【 在 axpq110 的大作中提到: 】
: 在list数据确定了的时候再调用listIterator = list.iterator()
: 比如说不能list = new ArrayList()后紧接着listIterator = list.iterator()
: 必需list = new ArrayList(),然后填数据,再然后listIterator = list.iterator()来遍历,且遍历过程中数据不能发生改变