java - 为什么选择ConcurrentModificationException的设计标准只是结构修改
问题描述
我确实明白,只要在创建迭代器后对基础集合进行结构修改,就会引发 ConcurrentModificationExcpetion。这似乎是一个设计决定。
我想知道为什么 CME 不考虑通过 set() 方法进行更新?最终,集合正在更新,如果创建了迭代器,遍历仍然可能导致结果不一致。
解决方案
除非您实际参与制定设计决策,否则不可能知道设计决策的确切原因。
我推测原因可能是迭代器旨在迭代集合,而不是集合中的值。
换句话说,迭代器就像一个“指针”,它将被移动以依次指向集合中的每个“空间”。通过在构造迭代器时了解集合的“形状”,您就知道如何移动指针以指向集合中的下一个空间。
如果存储在空间中的值发生变化,这并不重要:该空间和集合中的所有其他空间都保持不变。
但是,如果您通过结构修改来更改集合的形状,那么您基本上会使您对该指针指向的位置的任何假设无效;没有做一些非常聪明的事情,你还不如放弃并抛出异常。
推荐阅读
- react-native - aws-sdk (v 2.395.0) 和 react-native
- django - 如何将 VueJS 与 Django 集成并部署它们
- angular - Angular 7 已通过 Gmail 授权
- unity3d - Unity IOS - UI 滑块自动归零
- swift - TableView scrollViewDidEndDecelerating 崩溃中的 CollectionView
- sql - 标识列sql server 2016企业版sp1中违反主键错误
- html - 如何在多个 HTML 页面之间保持缩放级别一致?
- python - 是否有可行的方法在 PANDAS 中为 200 多个类别实施 expand_grid()?
- javascript - 如何在 Nodejs 中更新静态 css 文件
- c# - 如何将单元格格式化事件方法添加到动态创建的 radgrid 代码后面?