java - 在 Java 中使用嵌套 for 循环时避免 ConcurrentModificationException

标签 java concurrentmodification

在我的程序中,我创建了团队(例如足球),现在我想创建一种方法,让每个团队都与所有其他团队进行比赛。我的方法抛出 ConcurrentModificationException。在这里:

public void playMatches(){
    for (Team team : mTeams) {
        mTeams.remove(team);
        for (Team team1 : mTeams) {
            match(team, team1);
        }
        mTeams.add(team);
    }
}

我正在从 mTeams 中删除团队本身,这样它就不会与自己对战,但这会引发异常。我该如何处理?

最佳答案

既然您似乎明白发生了什么问题,那么让我们考虑一下您问题的“如何处理”部分。好消息是您根本不需要修改您的 Collection 。

与其通过删除然后添加项目来修改集合,不如在内循环中调用 match 时从外循环中跳过团队,如下所示:

for (Team team : mTeams) {
    for (Team team1 : mTeams) {
        if (team.equals(team1)) continue;
        match(team, team1);
    }
}

关于java - 在 Java 中使用嵌套 for 循环时避免 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34827331/

相关文章:

java - 如何在一个文档中解析多个连续的 xml 文件?

java - 带注释的 AspectJ 虫洞模式

java - 错误!在 eclipse 上连接 Hibernate 和 Postgresql

java - 迭代时出现奇怪的 ConcurrentModificationException

multithreading - 对内置通用Lisp对象的多线程(并行)访问

java - LinkedHashMap 的 ConcurrentModificationException

java - 为什么此代码不会导致 ConcurrentModificationException?

java - 对已排序的列表进行排序时,列表迭代在 Java 8 中抛出 ConcurrentModificationException

java - 最好的方法,如何在字典中查找单词

java - 通过Weblogic部署Java应用程序(主类)