编译代码时并发修改异常,

Concurrent Modification exception when i compile my code,

有人要求我做这个练习,但我很难理解为什么我在编译代码时总是出现并发修改错误。

"If the list contains a film with a title that matches the parameter title then update it's length and genre. If no match is found create a new film and add it to the list."

我已经设法检查是否有匹配的标题,但是如果没有,我就无法成功地将新电影添加到我的阵列中。这是我写的代码:

public void updateLengthAndGenre(String title, int length, String genre) {
    ArrayList<Film> output = new ArrayList<>();
    boolean found = false;

    for (Film film : films) {
        if (film.getTitle().equals(title)) {
            found = true;
            film.setGenre(genre);
            film.setLength(length);
        }
    }

    for (Film film : films) {
        if (!found) {
            films.add(new Film(title, length, genre));
        }
    }
}

谁能解释为什么我总是收到这个错误,并给我一些补救建议?

你得到这个exceotion的原因是因为你试图在迭代它的同时添加到一个集合中。你不能做这个。在你的情况下,你似乎根本不需要这样做。

public void updateLengthAndGenre(String title, int length, String genre) {
    ArrayList<Film> output = new ArrayList<>();

    for (Film film : films) {
      if (film.getTitle().equals(title)) {
          film.setGenre(genre);
          film.setLength(length);
          return;
      }
    }

    films.add(new Film(title, length, genre));  // synchronize if you're multithreading
}

这个是一样的效果。如果您绝对需要在迭代时添加到集合中,您可以使用 java.util.ListIterator.

ListIterator<Film> filmIter = films.listIterator();
while(filmIter.hasNext()){
    if( /* some condition */){
        fillmIter.add(new Film(title, length, genre));
    }
    filmIter.next(); // example only.
}