ArrayList 与 LinkedList

ArrayList 与 LinkedList 的区别

1.底层数据结构不同:ArrayList 的底层是基于数组来实现的,而 LinkedList 底层是基于链表实现的;(可以理解为 ArrayList 与 LinkedList 的区别实际上就是数组和链表的区别)

2.适用场景不同:ArrayList 更适合于使用随机查找较多的场景,LinkedList 更适合于使用随机插入较多的场景;

3.查询、插入、删除的时间复杂度不同:由于 ArrayList 是基于索引的数据接口,它的底层是基于数组的,可以随机读取,所以其查询的时间复杂度为O(1),而插入和删除的时间复杂度为O(n);LinkedList 是以元素列表的形式存储数据的,每一个元素和它的前一个元素和后一个元素连接在一起,它的底层是基于链表的,所以其查询的时间复杂度为O(n),插入和删除的时间复杂度为O(1)

4.ArrayList 实现了 List 接口,LinkedList 也实现了 List 接口,除此之外,LinkedList 还实现了 Deque 接口,所以 LinkedList 还可以当作队列来用;

5.LinkedList 比 ArrayList 更占内存,因为 LinkedList 为每一个节点存储了两个引用,一个指向前一个元素,一个指向后一个元素。

ArrayList

ArrayList  的内部结构其实就是数组(一块连续的存储空间)。实现了 List 接口。

当我们创建一个空的 ArrayList 时,它会使用默认容量(当前为 10)初始化其后备数组,在该数组未满时,其添加操作是非常快的,但是随着其后备数组容量的增加,添加操作之前可能还需进行一次扩容操作,扩容机制是将原数组的内存空间长度扩容至原来的 1.5 倍。

通常,当需要 List 实现时,ArrayList 是许多开发人员的默认选择。事实上,当读取次数远远超过写入次数时,这是一个非常明智的选择。

LinkedList

LinkedList 的内部结构其实是一个双向链表(不连续的存储空间)。实现了 List 和 Deque 接口。

链表的每个节点是一个 Node,节点中有 3 个属性:

  1. item : 实际存放的内容;

  2. prev : 指向前一节点的指针;

  3. next : 指向后一节点的指针。

当添加率远高于读取率时,LinkedList 更适合。 此外,当大多数时候我们想要第一个或最后一个元素时,它可以用于读取密集的场景。值得一提的是,LinkedList 还实现了 Deque 接口——支持对集合两端的高效访问。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值