我正在尝试按开始时间对时间跨度(表示为具有开始时间和结束时间的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);
}
}但它在for (Time[] span : workingList) (上面的那个)这一行抛出了一个java.util.ConcurrentModificationException。我以前从来没有见过这种异常,有人能给我解释一下它的含义和原因吗?
我也乐于接受更好的算法的建议。
发布于 2013-03-16 09:04:48
workingList.remove(compareTo);在集合上迭代时,您正在修改该集合。
你应该使用类似这样的东西:
ListIterator<Time[]> it = workingList.listIterator();
while (it.hasNext()) {
Time[] time = it.next();
..
it.remove();
}也有不使用列表迭代器的方法,但这似乎更正确。
发布于 2013-03-16 09:17:04
我的建议是使用Collections.sort()对列表进行排序。在调用该方法时,您需要指定自己的Comparator -因此:
Collections.sort(workingList,new Comparator<Time[]>() {
@Override
public int compare(Time[] time1, Time[] time2) {
return time1[0].before(time2[0]);
}
});这将排序workingList作为您的规格。
https://stackoverflow.com/questions/15444391
复制相似问题