无法实现:集合在遍历的时候对自身进行操作(添加、删除)

本文详细介绍了在Java中遍历集合时修改集合导致的`ConcurrentModificationException`异常。通过一个具体的代码示例展示了问题所在,并引用了博客链接提供了解决方法。核心知识点包括迭代器原理和安全的集合修改方式。
摘要由CSDN通过智能技术生成

首先这个是不成立的

public class Test {
    public static void main(String[] args) {
        //原List集合
        List<Student> list = new ArrayList(){{
            Student student = new Student();
            student.setId(1);
            Student student2 = new Student();
            student2.setId(2);
            Student student3 = new Student();
            student3.setId(3);

            add(student);
            add(student2);
            add(student3);
        }};
        //模拟遍历时自身操作
        for (Student student : list) {
            //如果 id为2就把他添加到list
            if (student.getId() == 2){
                list.add(student);
                //list.remove(student);
            }
        }
        //最后的结果
        System.out.println(list);
    }
}

结果:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
	at java.util.ArrayList$Itr.next(ArrayList.java:859)
	at com.dcq.Test.main(Test.java:24)

目前能力有限讲不出所以然,暂时记住在遍历的时候不能对其本身进行操作。

↓↓↓可参考下方大佬的文章↓↓↓

nConcurrentModificationException异常原因和解决方法_碌碌无为_心不在烟的博客-CSDN博客_concurrentmodificationexception

Java中,ArrayList是一个实现了List接口的动态数组,我们可以利用它来创建宿舍名单列表并进行各种操作。首先,你需要创建一个ArrayList实例,然后通过索引来添加、获取和删除元素。 以下是如何操作一个模拟的宿舍名单ArrayList的示例: ```java import java.util.ArrayList; public class DormitoryList { private ArrayList<String> dormitory = new ArrayList<>(); // 初始化宿舍名单 public DormitoryList() { dormitory.add("学生A"); // 1号宿舍 dormitory.add("学生B"); // 2号宿舍 dormitory.add("学生C"); // 3号宿舍 dormitory.add("学生D"); // 4号宿舍 dormitory.add("学生E"); // 5号宿舍 } // 插入新元素到指定位置(例如2号位置) public void insertAtPosition(int position, String name) { if (position >= 0 && position <= dormitory.size()) { dormitory.insert(position, name); } else { System.out.println("插入位置超出范围"); } } // 获取指定索引的元素(例如第5个元素) public String getFifthElement() { if (dormitory.size() > 4) { return dormitory.get(4); // Java从0开始计数,所以5号元素对应索引为4 } else { return "宿舍不足五个"; } } // 删除指定索引的元素(例如第六个元素,同样以0为基础计数) public void removeSixthElement() { if (dormitory.size() > 5) { dormitory.remove(5); } else { System.out.println("宿舍名单不足六个元素"); } } // 遍历并打印宿舍名单 public void printList() { for (int i = 0; i < dormitory.size(); i++) { System.out.println("第" + (i+1) + "号宿舍: " + dormitory.get(i)); } } // 测试上述方法 public static void main(String[] args) { DormitoryList list = new DormitoryList(); list.insertAtPosition(2, "学生F"); // 在2号宿舍插入新成员 System.out.println("新的宿舍名单:"); list.printList(); String fifthStudent = list.getFifthElement(); System.out.println("第五个宿舍的学生是: " + fifthStudent); list.removeSixthElement(); list.printList(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值