art*_*rxe 6 java exception linked-list concurrentmodification
这是我的代码:
// eventList is a LinkedList
public void run() {
Iterator<Event> it = eventList.iterator();
int size = eventList.size();
while(size > 0) {
while(it.hasNext()) {
Event e = it.next(); //flaged line
if(e.ready()) {
System.out.println(e);
e.action();
eventList.remove(e);
--size;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误java.util.ConcurrentModificationException是在flag lined(Event e = it.next();)处抛出的.你是否在我的代码中看到一个错误,这个错误明显是抛出异常的原因?
Joa*_*uer 17
您在迭代eventList时使用eventList.remove()时正在修改.你不能这样做,否则Iterator变得无法使用.
只需更换eventList.remove(e),it.remove()它应该没问题.
此外,如果您的某个事件在第一次运行中没有准备就绪,您可以很容易地遇到无限循环,因为一旦返回it.hasNext()它将永远不会true返回false,但size也不会被修改.一个解决方案是整个移动Iterator it = ...线内的第一while环.
我还修改外部while循环使用while (!e.isEmpty())而不是尝试跟踪eventList手动的大小.
| 归档时间: |
|
| 查看次数: |
3509 次 |
| 最近记录: |