java ArrayList和LinkedList区别

ArrayList和LinkedList区别

共同点:

(1)ArrayList和LinkedList都实现了Collection接口。

在这里插入图片描述

(2)都是一种线性的数据结构。
(3)底层代码都是泛型。
ArrayList构造函数:
在这里插入图片描述
LinkedList的构造函数:
在这里插入图片描述(4)都是java集合框架提供的结构。

不同点:

(1)底层结构
ArrayList:底层结构为动态类型的顺序表
LinkedList:双向不带头结点的链表
(2)创建时的默认值
ArrayList:ArrayList默认创建时大小为10;
在这里插入图片描述
LinkedList:LinkedList无参构造
在这里插入图片描述
(3)存储的空间
ArrayList:底层存储是一段连续的空间。
LinkedList:底层存储是链式结构,空间不一定连续。

(4)插入/删除
ArrayList:由于是一段连续的空间,因此在任意位置插入/删除时,需要对ArrayList的部分元素进行移位,时间复杂度较高为O(N),不适用于大量插入删除的场景。
LinkedList:通过链表进行存储,插入/删除时不需要搬移元素,只用改变链表节点的指向即可。因此任意位置的插入/删除速度较快,时间复杂度为O(1),适用于大量插入删除的场景。

(5)任意位置访问速度
ArrayList:底层是连续的存储空间,因此可以通过直接访问,不需要遍历,访问的时间复杂度为O(1),适用于需要大量随机访问的场景。
LinkedList:底层空间不一定连续,因此在访问特定位置的元素时,必须要进行遍历,时间复杂度为O(N)。

(6)空间是否扩容
ArrayList:由于底层是连续的,因此在插入期间,如果ArrayList的大小不允许再插入元素,则需要进行扩容。
LinkedList:底层是链式结构,不需要进行扩容,直接改变对应节点指向即可。

(7)空间利用率
ArrayList:ArrayList底层是数组,因此不需要像LinkedList开辟一个单独的指向区域用于标明下一个元素位置,ArrayList的扩容机制是每次扩容为原来的1.5倍,如果在新扩容的区域仅存储一位时,则其空间利用率不高。
LinkedList:LinkedList底层为链表,它除了存储元素本身以外,还需要再开辟空间进行指向,但LinkedList的特性是不用扩容,每增加一个元素就对应增加一个节点,因此在LinkedList中一般不会有空结点。

(8)使用场景
ArrayList:适用于将元素存储起来,需要进行大量的访问操作的场景。
LinkedList:适用于需要进行大量任意位置插入/删除操作的场景。

(9)迭代器的实现方式(以++举例)
ArrayList:获取下一个节点的方式,只需要将遍历数组的索引i++。
LinkedList:通过指针域next来获取下一个节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值