使用下面的代码片段,尝试处理电子表格,需要排除ad hoc列。我知道我正在做的原始方式,将异常放在ArrayList中并处理每个列表中的列表并且在当前行列上的增量是反常的,但是你知道只是完成它。
但是我得到了标题错误,我认为永远不会发生错误。我只是循环遍历ArrayList并进行比较,而不是修改任何内容。错误在哪里?有没有更好的方法来处理例外列表?
ArrayList noProcess = new ArrayList();
Iterator itr00 = noProcess.iterator();
Iterator itr01 = noProcess.iterator();
noProcess.add(new Integer("5"));
noProcess.add(new Integer("18"));
....
boolean include=true;
for(int i=0;i<archive.length;i++){
for (int j = 0; j < archive[i].length; j++) {
while (itr00.hasNext()) {
if (j == ( (Integer) itr00.next()).intValue())
include = false;
}
if (include) {...
答案 0 :(得分:4)
一旦你在它上面创建了一个迭代器(除了通过迭代器),你就无法改变Iterable
的内容,否则你只要移动迭代器就会得到一个ConcurrentModificationException - 你创建了一个迭代器,然后执行noProcess.add(new Integer("5"));
,然后再推进迭代器。
另外,你创建了两个迭代器 - 你也不应该这样做 - 这太疯狂了。
答案 1 :(得分:1)
来自JavaDoc,
ConcurrentModificationException
:此例外可能是 由检测到并发修改的方法引发的 当不允许这样的修改时的对象。
E.g 一个线程修改一个集合而另一个线程正在迭代它时,通常不允许这样做。
答案 2 :(得分:1)
来自Java Docs:
此类的迭代器和listIterator返回的迭代器 方法是快速失败的:如果列表在结构上被修改了 创建迭代器之后的时间,除了通过之外的任何方式 迭代器自己删除或添加方法,迭代器会抛出一个 ConcurrentModificationException的。因此,面对并发 修改,迭代器快速而干净地失败,而不是 在不确定的时间冒着任意的,非确定性的行为 在将来。
使用迭代器的add方法将元素添加到List
中答案 3 :(得分:0)
在获取迭代器后在列表中添加记录,请更正..它应该可以正常工作。