ArrayList与LinkedList的区别

本文详细解析了ArrayList和LinkedList的区别,重点在于它们在查询、增删操作上的性能差异,以及各自的特点和应用场景。

ArrayList是采用数组形式保存对象,其特点是:查询快,增删慢。

LinkedList是采用链式存储,通过节点直接彼此连接来实现的,其特点是:查询慢,增删快。

具体解释:

ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有缺点:

快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。

向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。

操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。

ArrayList的初始默认长度是10,当长度不够时,会自动创建一个新的ArrayList,长度在原有的基础上增加50%, 即:15,同时把原有的数据放到新的ArrayList中,再把新数据插入到新的ArrayList。

LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用、后一个节点的引用和节点存储的值。当插入一个新的节点时,只需要修改其中保存的前后关系的节点的引用即可,当删除记录时也是一样。

这样就带来以下有缺点:
操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢。


以下是他们大体的图形:

ArrayList:
【】【】【】【】【】【】【】【】
他就是一个数组的形状;
LinkedList:
【】
_【】
__【】
___【】 



转载于:https://my.oschina.net/u/2416019/blog/624713

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值