Java常用集合类型-之ArrayList & LinkedList比较

Java常用集合类型-之ArrayList & LinkedList比较

1 ArrayList特点

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
  • ArrayList是一个线性的表,数据存储也是线性连续的
  • ArrayList底层实现是数组,所以每个元素都有自己的下标index
  • ArrayList是一个可变的数组列表,可支持普通的增删改查操作

2 LinkedList特点

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
  • LinkedList是一个线性表,但是数据存储不是连贯的,数据与数据之间通过指针进行连接
  • LinkedList底层使用双向链表实现的
  • LinkedList可以支持链表、双端队列的常规操作,增删改查也是支持

3 LinkedList compares to ArrayList

这2种数据结构在数据量较小时,增删改查的效率差不多,但是到10K级别的时候增删改查的效率就有明显的差异了。

ArrayList底层实现的数组,基于这种数据结构查询和修改是很方便的,因为修改往往建立在查询的基础上,只需要通过数组对应的下标index找到对应的值就行了,效率很快。

ArrayList的插入和删除操作是代价很大的,假如我在某个位置删除一个元素,那么为了保证整个数据结构的连续的特性,删除元素后面的元素都得往前移动一位,增加操作则往后移动一位。

LinkedList底层实现的是双向链表,基于这种数据结构,查询和修改往往不是强项,因为不管怎样都得从头开始遍历。

但是删除和新增往往很快,特别是删除或新增在头、尾的时候,因为往往这些操作只需要修改指针指向就行了,没有其余的连带操作。

我们可以使用代码来分别测试这2个数据结构的增删改查的耗时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值