1.ArraList是实现了java.io.Serializable接口的,按理说是要在网络传输之间序列
化的.
2.数据存放在 transient Object[] elementData. transient关键字一句话说明含义:将不需要序列化的变量声明为,当序列化对象的时候,这个属性将不会被序列化.
3.ArrayList 实现 Serializable接口 但是储存数据的又被transitent修饰是为什么?
4.当new(initial)一个ArrayList的时候默认的size是10(如果没有指定大小默认就是0)
5.当发现新增数据以后,大小超过原数组集合,默认扩容置1.5倍,然后把原数组的值赋值到新数组.
6.index新增或者删除会消耗性能,所以有了双向链表LinkedList
7.至于谁跟占用空间,只能说不一定,因为ArrayList默认扩容是到1.5倍的.但是LinkedList又是一个双向链表,有前驱后驱还有element.
8.还记得那个transient的关键字吗,因为要是ArrayList没有装满,我们不希望序列化没有装的位置,所以ArrayList重写了writeObject的方法.这样每次序列化的时候,先调用defaultWriteObject去序列化非transent元素,elementObject这个就不会去序列化,加快序列化速度,减少空间开销.
9.总结,一般情况下LinkedList占用空间更大,但是当ArrayList刚好到临界值的时候,会自动扩容到1.5倍(还是没有LinkedList占用空间多).但是ArrayList使用的是连续的内存空间,对CPU缓存更为友好.