ArrayList和LinkedList的区别

1、ArrayList底层是数组实现,LinkedList底层是双向链表实现

2、(1)ArrayList查询快,插入删除慢,因为数组的原因,查询通过index就能得到需要的数据,所以时间复杂度是O(1)。

        插入操作分为两种情况:1)、在数组末尾插入:首先需要判断数组是否已满,没满的话直接在末尾赋值。满了的话需要进行扩容操作:新建一个容量更大的数组,使用Arrays.copyOf方法将原数组内容复制到新数组里,然后在数组末尾添加数据。2)、在指定位置插入数据:首先需要判断数组是否已满,没满的话使用System.arraycopy方法将原数组和目标数据复制给自己。满的话同1),进行扩容再复制。

        删除操作也分两种情况:1)、直接在末尾删除。2)、指定位置进行删除:使用System.arraycopy方法将结果数组复制给自己

综上,ArrayList无论是时间上还是空间上插入删除效率都慢。

(2)LinkedList查询慢,插入删除快。因为双向链表的原因,每次查询都需要从头开始进行遍历,所以每次查询的时间复杂度都是O(n)。插入删除也需要遍历到需要的插入删除的位置,然后对相应节点进行操作即可,不需要对额外的数据进行操作,所以插入删除速度快。而且由于双向链表,所以每次遍历的时间是O(n/2),速度会更快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值