关于顺序存储和链式存储读写性能的比较(理论)

在内存中,数据有两种存储方式:顺序存储和链式存储,在Java中有也对应了两种封装的实现—>ArrayList和LinkedList

ArrayList

数组的特点:长度固定,可以用索引直接找到元素
这里写图片描述
插入数据:由于ArrayList的底层封装着一个可变数组(在JDK1.8中,初始容量位10,如果所需容量大于数组容量,则扩容,扩容机制为:新数组=原来数组长度+原来数组长度>>1),所以在计算量或者数量小的时候,运算还比较快,当数值频繁的扩容时候,ArrayList的性能就降低了,因为每次不够的时候要开辟新数组长度,而且要将原来数组中的数据复制到新数组中.
删除数据:数组中删除数据可以分为两步:1.找到元素2.将目标元素后面的元素向前移动
    假如数组长度为n,删除第几个元素就一共n-1次,所以删除后面的元素效率高,删除前面的效率低
修改数据:找到索引,直接将目标元素的值赋值为要修改的元素,效率高
查找数据:由于数有下标索引,所以直接根据索引找到数据,速度快

LinkedList

这里写图片描述
LinkedList的结构完全不同与数组类型,它不用连续的内存,依靠Node中的存下一个Node引用来存储.它是正真的动态数据结构;
插入数据:如果是单向链表,则插入的数据越多,效率越低,因为每次插入数据,要从头节点循环,假如现在Linked的节点数量为n则往向该链表中插入一个数据,要循环n次找到链表的尾部,然后插入效率低,如果是循环链表则插入数据也变得非常简单,因为头和尾相连,每次插入数据通过头可以找到尾,直接插入,效率高
删除数据:链表的删除可以分为两步:1.通过从头或者尾循环链表,找到目标位置前一个或者后一个,然后把他们相连接,所以删除靠经头节点或者尾节点的数据效率高,越靠近中间,效率越低
修改数据:先找到目标数据,要循环n次,然后将节点的数据设置为目标数据,较数组而言,比较复杂
查找数据:和修改数据的第一步相同,较数组而言,还是比较复杂

总结

就综合或者说大数据量情况来看,LinkedList的性能比ArrayList好,但是在一般应用中,都是展示数据,则需要读取性能好,所以通常用ArrayList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值