我有一个方法可以根据名为id的类的属性从数组列表中删除对象.当我调用它时,它会找到正确的id,然后中断.这对我来说都是非常陌生的

    public static void DeleteStudent(ArrayList<Student> Student_Class, String studentid) {
        for(Student student : Student_Class)
            if(student.getId().equalsIgnoreCase(studentid))
                Student_Class.remove(student);
    }

错误:

线程"main"中的异常java.util.ConCurrentModificationException异常 在java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013) 在java.base/java.util.ArrayList$Itr.next(ArrayList.java:967) 在StudentProgram.DeleteStudent(StudentProgram.java:39) 在StudentProgram.main(StudentProgram.Java:28)

推荐答案

如果您在Collection上执行只读操作(您的ArrayListCollection),则仅使用for-each循环.

如果要在循环时删除,则应使用java.util.Iterator.

Iterator很容易使用,你的ArrayList甚至给了你一个获取Iterator的方法.您所要做的就是在顶部(import java.util.Iterator;)上添加一个导入,然后假定为Iterator<Student> iterator = myList.iterator();.

下面是如何使用您的代码示例完成此操作.别忘了把进口词放在你班级的第一名.

public static void DeleteStudent(ArrayList<Student> Student_Class, String studentid)
{

    Iterator<Student> iterator = Student_Class.iterator();

    while(iterator.hasNext())
    {

        Student student = iterator.next();

        if(student.getId().equalsIgnoreCase(studentid))
        {

            iterator.remove(); //removes the most recently fetched student

        }

    }

}

Java相关问答推荐

ActivityCompat.请求收件箱自动拒绝权限

空手道比赛条件

如何使用Java API在Oracle ODI中运行模拟?

基本时态运算的ISO-8601周数据表示法

在JavaFX项目中注册组合框的控件FX验证器时,模块系统出错

调用引发泛型异常的泛型方法时出现编译错误

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

如何确定springboot在将json字段转换为Dto时如何处理它?

测试期间未执行开放重写方法

如何使用Jackson将XML元素与值和属性一起封装

格式中的特定回录键-值对

在Java 15应用程序中运行Java脚本和Python代码

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Spring Boot中的应用程序.properties文件中未使用的属性

错误:不兼容的类型:Double不能转换为Float

记录是类的语法糖吗?

将java.util.Date(01.01.0001)转换为java.time.LocalDate将返回29.12.0000

Java类型推断:为什么要编译它?

将基于实例编号的对象列表拆分为新的对象列表

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败