Java `ArrayList` 的 `subList` 修改为何会影响原集合并可能触发 `ConcurrentModificationException`:说明视图语义与结构性修改边界
进阶版来源:bytedance高级工程师
草稿
答案解析
Java 里 ArrayList.subList(from, to) 返回的不是一个新的独立集合,而是原 ArrayList 的一个 视图 。
也就是说,subList 底层还是引用原集合的数组,只是维护了自己的起始偏移量、长度等信息。所以对子列表做修改,本质上是在修改原集合对应区间的数据。
比如:
这里 sub.set(0, 20) 实际修改的是原集合下标 1 的元素,所以原集合会被影响。
ConcurrentModificationException 的原因主要和 modCount 有关。ArrayList 内部有一个 modCount 字段,用来记录集合发生结构
登录后查看完整内容
