我正在尝试按时间范围的开始时间排序列表(用开始时间和结束时间表示为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)(顶部的那个)。我以前从未见过这种例外情况,有人可以向我解释它的含义和原因。
java.util.ConcurrentModificationException
for (Time[] span : workingList)
我也愿意为此提出更好的算法建议。
workingList.remove(compareTo);
您在迭代时正在修改集合。
您应该使用类似:
ListIterator<Time[]> it = workingList.listIterator(); while (it.hasNext()) { Time[] time = it.next(); .. it.remove(); }
也有一些方法不使用列表迭代器,但这似乎更正确。