java.util.ConcurrentModificationException异常错误

java.util.ConcurrentModificationException异常错误,java,exception,arraylist,Java,Exception,Arraylist,我正在尝试用GUI制作一个java应用程序。 我正在编写一个代码,我想让用户更改一些数据,并将这些更改保存在文本文件中。在此之前,我想删除列表中已更改的旧数据,然后用最后一次更改重写新数据。如果我缺少您想要查看的任何类,请告诉我,我将尽快将其联机 这是我的 public void saveChanges(footBall Player, String name, String level, int[] scores, int footSize) { try {

我正在尝试用GUI制作一个java应用程序。 我正在编写一个代码,我想让用户更改一些数据,并将这些更改保存在文本文件中。在此之前,我想删除列表中已更改的旧数据,然后用最后一次更改重写新数据。如果我缺少您想要查看的任何类,请告诉我,我将尽快将其联机

这是我的

    public void saveChanges(footBall Player, String name, String level,
        int[] scores, int footSize) {

    try {
        if (CompetitorsList.size() != 0) {
            for (Competitors C : CompetitorsList) {

                if (C instanceof footBall) {
                    String Number = Player.playerNumber + "";
                    if (C.getPlayerNumberAsString().equals(Number)) {
                        System.out.println("c");

 //the error hit me here when i try to remove the object from the list the exception error is       java.util.ConcurrentModificationException 
                        CompetitorsList.remove(C);

                    }

                }
            }

            Name NewName = new Name(name);
            System.out.println("Please get in2");
            footBall NewPlayer = new footBall(Player.playerNumber, scores,
                    level, footSize, NewName);

            CompetitorsList.add(NewPlayer);

            SaveOnFile();
        } else {
            System.out.println("No List");
        }

    } catch (Exception ex) {
        System.out.print("testing4");
        System.out.print("something wrong" + ex);
    }

}
这是SaveOnFile方法: public void SaveOnFile(){

对集合调用remove()会使所有活动迭代器无效。相反,您必须使用迭代器。remove()方法:

for(Iterator it=CompetitorsList.Iterator();it.hasNext();){
C=it.next();
if(C实例F…){
如果(C.getPlayerNumberAsString().equals(Number))
it.remove();
...

这样,迭代器()就知道集合是如何变化的,否则这是不可能的,因为ArrayList不跟踪它生成的迭代器。

或者,如果您想使用相同的“for next”语法而不改变迭代器语法,请将要删除的所有对象收集到一个临时集合中

ArrayList<Competitors> removeThese = new ArrayList<Competitors>();
for (Competitors C : CompetitorsList) {
   if (wantToRemove(C))  // your number logic goes here...
      removeThese.add(C);
}
CompetitorsList.removeAll(removeThese);
ArrayList removeThese=new ArrayList();
竞争对手(C:竞争对手名单){
if(wantToRemove(C))//您的数字逻辑在这里。。。
删除这些。添加(C);
}
竞争对手名单。删除所有(删除这些);

感谢您的快速重播,如果您能帮我的话,我还有一个问题。我不想要的书写文件中有空格。有办法控制吗??
for(Iterator<Competitors> it = CompetitorsList.iterator(); it.hasNext(); ) {
    Competitors C = it.next();
    if(C instanceof ...) {
        if(C.getPlayerNumberAsString().equals(Number))
            it.remove();
    ...
ArrayList<Competitors> removeThese = new ArrayList<Competitors>();
for (Competitors C : CompetitorsList) {
   if (wantToRemove(C))  // your number logic goes here...
      removeThese.add(C);
}
CompetitorsList.removeAll(removeThese);