为什么循环遍历集合的时候不能删除?怎么解决?
For循环为什么不能对集合进行删除操作_BUG指挥官的博客-CSDN博客_加强for循环不能删除集合元素
JAVA集合为什么不能在foreach 循环中添加或删除元素? - Mccn - 博客园
ArrayList中的数组为什么用transient进行修饰
我们都知道 transient 标记的字段代表不序列化,而 ArrayList 的数组用 transient 当然就表示其内部的数据不序列化,那岂不是数据要没了?
并不是的。之所以这样标记,是因为我们数组的实际大小会大于真正的元素量,比如你的数组长度是10,实际上里面就只有5个元素。
如果正常序列化的话,那会把空值也给序列化了,所以为了只序列化实际有值的元素,ArrayList 用 transient 标记了 elementData字段,然后再实现了 writeObject 和 readObject 方法,里面的实现逻辑是只会序列化实际存在的元素。
简单来说就是为了避免多余元素的序列化,用 transient 标记了 elementData 字段避免使用默认的序列化方式,定义了 writeObject 和 readObject 实现了自定义的序列化方式。