ConcurrentModificationException的?

我正在尝试按开始时间排序时间跨度列表(表示为具有开始时间和结束时间的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) (顶部的for (Time[] span : workingList)的行上抛出一个java.util.ConcurrentModificationException 。 我以前从未见过这个例外,有人可以向我解释它的含义和原因。

我也愿意接受更好的算法建议。

 workingList.remove(compareTo); 

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

你应该使用类似的东西:

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

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

我的建议是你使用Collections.sort()来排序列表。 它为您进行排序,并使您的可读性更具可读性。 调用方法时,您需要指定自己的Comparator – 因此:

  Collections.sort(workingList,new Comparator() { @Override public int compare(Time[] time1, Time[] time2) { return time1[0].before(time2[0]); } }); 

这会将workingList排序为您的规格。