集合List实现类ArrayList与LinkedList的区别

本文深入对比了ArrayList和LinkedList这两种List接口实现类的区别。ArrayList基于动态数组,适合查询操作,时间复杂度为O(1);而LinkedList基于链表,新增和删除数据更优,但查询效率较低。文章详细解析了两种数据结构在不同操作场景下的性能表现。

ArrayList和LinkedList都是实现List接口的实现类。
区别:

  1. ArrayList底层是使用数组存储数据,是基于动态数组的数据结构;LinkedList则是基于链表的数据结构。
    这里的动态数组意思是说 “小数组换大数组,然后进行数组拷贝”,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。
  2. 对于数据查询,ArrayList在性能上要优于LinkedList。因为ArrayList是数组,在查询数据时只需按照数组下标便可查到,时间复杂度为O(1);而LinkedList是链表,查询数据需要移动指针从前往后遍历,时间复杂度是O(n)。
  3. 对于新增和删除数据,LinkedList要比ArrayList占优势。
    (1)对于插入操作,ArrayList需要移动数据,在空间不足的情况下,还需要重新申请空间,并拷贝整个数组;而LinkedList只需要申请一个节点,修改一下指针指向。
    (2)对于删除操作,ArrayList分两种删除,一种是删除某个位置的元素,例如数组a中要删除a[2]这个元素,这个可以直接定位到a[2],但删除完成后要重新排列好剩下的元素,也需要移动数据,另一种是删除某个元素,比如要删除数组中的’5’这个元素,这时要先遍历数组找到这个元素;而LinkedList在删除的时候,只需要查找要删除的节点并操作指针,在最坏的情况下,大不了从前往后遍历一次链表。

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值