ArrayList和LinkedList对比详解

 

List接口:

List接口的两个主要实现类:ArrayList & LinkedList

ArrayList: 

    1》ArrayList 是List接口的可变数组的实现,允许存储NULL在内的所有元素。

    2》底层数据结构是数组,数组的元素类型是Object。

    3》动态扩容,其增长幅度为原长度0.5倍

    4》线程不安全,如果需要保持线程安全可以用 Collections.synchronizedList(List list)来实现

    5》查询效率高(因为是基于动态数组,时间复杂度O(1))

    6》插入,删除效率低,时间复杂度O(n)

    7》扩容的时候,会将老数组中的数据拷贝重写赋值到新数组,代价很高。

LinkedList:

    1》LinkedList 是List接口的双向链表的实现。并且运行NULL值

    2》底层数据结构是双向链表。

    3》线程不安全

    4》查询效率低(因为是基于链表实现,查询效率没有数组高)

    5》插入,删除效率相对较高。


备注说明:ArrayList 和 LinkedList 在操作复杂度上的区别在于:

1 获取第N个元素 get()

ArrayList 直接根据下标获取 时间复杂度 O(1)

LinkedList 需要遍历复杂度O(n)


2 直接在末尾添加一个元素add(end)

ArrayList 时间复杂度O(1)

LinkedList 时间复杂度O(1)


3 随机添加一个元素 add(index, value)

ArrayList 在index后面添加元素,需要移动index后面的元素 时间复杂度O(n)

LinkedList 需要找到第index个元素,然后将指针指向,复杂度O(n) ,

需要说明:虽然ArrayList 和 LinkedList 的add操作时间复杂度都为O(n)但是 LinkedList不涉及元素移动,只是指针指向。因此它的效率要比ArrayList高


4 删除元素 remove()

ArrayList 删除元素 后面的元素要逐个往前移动一位。因此时间复杂度O(n)

LinkedList 删除元素直接指针指向操作 时间复杂度O(1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值