首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentModificationException?

ConcurrentModificationException?
EN

Stack Overflow用户
提问于 2013-03-16 09:01:53
回答 2查看 582关注 0票数 0

我正在尝试按开始时间对时间跨度(表示为具有开始时间和结束时间的Time[]数组)的列表进行排序。我尝试使用以下嵌套循环来完成此操作:

代码语言:javascript
复制
            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。我以前从来没有见过这种异常,有人能给我解释一下它的含义和原因吗?

我也乐于接受更好的算法的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-16 09:04:48

代码语言:javascript
复制
workingList.remove(compareTo);

在集合上迭代时,您正在修改该集合。

你应该使用类似这样的东西:

代码语言:javascript
复制
ListIterator<Time[]> it = workingList.listIterator();

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

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

票数 6
EN

Stack Overflow用户

发布于 2013-03-16 09:17:04

我的建议是使用Collections.sort()对列表进行排序。在调用该方法时,您需要指定自己的Comparator -因此:

代码语言:javascript
复制
    Collections.sort(workingList,new Comparator<Time[]>() {
        @Override
        public int compare(Time[] time1, Time[] time2) {
            return time1[0].before(time2[0]);
        }
    });

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15444391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档