一尘不染

ConcurrentModificationException?

java

我正在尝试按时间范围的开始时间排序列表(用开始时间和结束时间表示为Time []数组)。我正在尝试使用以下嵌套循环来做到这一点:

            for (Time[] span : workingList){
            Time[] compareTo = workingList.get(0);

                for (Time[] inSpan : workingList){
                    if (inSpan[0].before(compareTo[0])){
                    compareTo = inSpan;
                    }
                }
            workingList.remove(compareTo);
            toReturn.add(compareTo);
        }

    }

但它java.util.ConcurrentModificationException在行上抛出了一个for (Time[] span : workingList)(顶部的那个)。我以前从未见过这种例外情况,有人可以向我解释它的含义和原因。

我也愿意为此提出更好的算法建议。


阅读 202

收藏
2020-12-03

共1个答案

一尘不染

workingList.remove(compareTo);

您在迭代时正在修改集合。

您应该使用类似:

ListIterator<Time[]> it = workingList.listIterator();

while (it.hasNext()) {
  Time[] time = it.next();
  ..
  it.remove();
}

也有一些方法不使用列表迭代器,但这似乎更正确。

2020-12-03