List中的数据为什么不能增强for来删除

在增强for循环中删除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.wfbql.test.SetTest.main(SetTest.java:12)

 

冷静的思考为什么在增强for中就会报错呢? 

必须深入源码

报错的原因是由于 modCount和expectedModCount 不相等 

那modCount和expectedModCount 是干什么的呢?

创建List的时候会自动创建这两个变量 ,  expectedModCount的初值为modCount , modCount和expectedModCount是用于表示修改次数的,其中modCount表示集合的修改次数,这其中包括了调用集合本身的add方法等修改方法时进行的修改和调用集合迭代器的修改方法进行的修改。而expectedModCount则是表示迭代器对集合进行修改的次数

  final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }

通过 modCount和expectedModCount 了解到

当我们使用增强的for循环时 遍历的同时修改了ArrayList 中的内容, 由于ArrayList 是非线程安全的,所有报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
增强for循环(foreach)是一种用于遍历数组或集合的简洁的循环语法。与传统的for循环相比,增强for循环在语法上更加简洁易懂。它的语法结构如下: ``` for (数据类型 变量名 : 数组名/集合名) { // 循环体 } ``` 在循环的每一次迭代,变量名会自动被赋值为数组或集合的当前元素,并执行循环体。增强for循环适用于遍历数组或集合的所有元素,但不适用于对元素进行删除等修改操作。 相比之下,传统的for循环在遍历数组时,可以通过修改索引来实现对数组元素的删除或修改操作。 需要注意的是,增强for循环和传统的for循环在功能上是相同的,只是语法上有所不同。在选择使用哪种循环时,可以根据具体的需求进行选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [foreach(增强型for循环)](https://blog.csdn.net/qq_45722267/article/details/113029368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【java细节】for循环,for-each(增强for循环),forEach以及Iterator迭代器对比](https://blog.csdn.net/MR_Peach07/article/details/121698678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值