ArrayList和LinkedList哪个更占空间?五分钟了解一下

哪个更占空间,首先要介绍一下两者的机制吧

 

首先是我们的老朋友,ArrayList。昨天我们还刚刚见过面。

ArrayList顾名思义,他是一个数组集合。

transient Object[] elementData;

这个数组的初始容量呢,是10。

private static final int DEFAULT_CAPACITY = 10;

当然集合实际大小还要是list.size。既然是数组,我们知道他有一个特点,索引。所以通过索引下标呢,我们可以更快的去查询List里的数据。并且数组集合实现了动态扩容。比如我们初始容量10满了,他就会扩容至原来大小的1.5倍。但是索引也有弊端,在ArrayList 向两个索引中插入一个数据的时候,插入数据索引后面的数据都会被copy,往后挪一个下标。这样在数据量大的时候增删操作时是及占性能的。

 

为了解决这个问题,List家族的LinkedList就登场了。

因为他是node数据结构,所以是基于双向链表储存的。每个数据都会记录指向前后地址两个节点。在进行增删操作时可以直接进行。但当前按照下标去查询数据时,会先计算链表总长度一半的数据,判断其下标是在左还是右,从而决定是从头结点还是尾结点开始遍历。所以查询起来效率不是很好。并且他会保存每个数据的前后地址的节点,占用空间也是很大的。

 

 

那ArrayList就胜出了吗,不,因为他的1.5扩容机制。在数据量大并且实时插入的情况下,会出现一个数据就会导致其扩容1.5倍。但是

 

两级反转。ArrayList的数组变量是用transient关键字修饰的。这个关键字可以避免被修饰的变量序列化。ArrayList在写数的时候会先通过遍历序列化数组中非Transient的元素。elementData这个数组对象不去序列化它,而是遍历elementData,只序列化数组里面有数据的元素,这样一来,就加快了序列化速度,还大大节省了多余空间。

如果有问题或者建议请多提出交流  

you friend at CSDN :)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值