ArrayList和LinkedList空间占用问题

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缓存更为友好.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值