首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说说ArrayList和LinkedList的区别
[问答题]
请你说说ArrayList和LinkedList的区别
添加笔记
求解答(0)
邀请回答
收藏(192)
分享
纠错
147个回答
添加回答
65
十七_
ArrayList底层是数组实现的,数组是一组连续的内存单元,读取快(使用索引),插入删除慢(需要重新计算大小或是更新索引) LinkedList底层基于双向链表,读取慢,插入删除快;链表的每一个节点保存了数据值,和指向前一个节点的指针和指向后一个节点的指针。占内存
发表于 2022-04-24 15:34:25
回复(0)
15
在看面经的袋鼠很想去杭州
ArrayList 是基于数组实现的,LinkedList是基于双向链表实现的,随机查询通过ArrayList查询,删除或增加多用LinkedList实现不需要重新计算索引和大小,LinkedList比Array更占内存,链表包括前后指向的引用和数据体
发表于 2022-04-28 17:04:25
回复(0)
12
阐禅
相同点:ArrayList和LinkedList都都实现了List接口,它们都是有序集合,并且能存储重复的元素。它们都是线程不安全的 不同点:ArrayList底层是数组结构,而LinkedList底层是双向链表,因为LinkedList底层是链表,每个元素都要存放直接前驱和后继,每一个元素占用空间多,而ArrayList初始化容量是10.每次扩容为之前的1.5倍,可能会造成空间浪费。 应用上:ArrayList适用于增删较少,查询多的场景,而LinkedList适用于查询少,增删较多的场景。
发表于 2022-05-06 16:31:41
回复(0)
7
牛客412853187号
ArrayList : 是基于动态数组,连续存储内存,适合下标访问(随机访问),扩容机制:因为数组长度固定超出长度存数据时需要新建数组,然后将老数组拷贝到新的数组,如果不是尾插入还要将元素后移,使用尾插发并预先提供集合的容量可以极大地提高性能,甚至可以超过 LinkedList(需要创建大量Node对象) LinkedList:基于链表的实现,存储内存是分散的,适合做插入和删除操作,查询慢,需要遍历链表,LinkedList连链表必须使用Iterator不能使用 for 循环,因为 for 循环是根据get(i) 获取某一元素时都需要对List进行重新遍历,应能消耗极大。 另外不要使用IndexOf()等返回元素索引,并利用其进行遍历,使用IndexOf进行遍历,当结果为空时会返回整个链表。
发表于 2022-05-06 16:08:31
回复(0)
2
岑溪123
1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。 2. ArrayList是根据下标以时间复杂度O(1)进行随机访问,LinkedList是O(n) 因为要遍历整个链表。 3. 对于插入和删除操作,LinkedList要优于ArrayList,因为LinkedList只需要断开前驱指针和后继指针,不需要像ArrayList那样重新计算大小或者是更新索引。 4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了前驱指针和后继指针。ArrayList和LinkedList都是非线程安全的。
编辑于 2023-02-10 20:51:22
回复(0)
2
Chaos1874
arrayList底层是基于数组实现的,数组是一组连续的内存单元,读取,写入快。linkedList是基于双向链表实现的,读写慢,插入删除快。
发表于 2022-05-11 10:55:53
回复(0)
1
佩奇大大
arraylist底层是数组实现,linkedlist底层是双向链表,数组是一块连续的内存单元,读取快,插入慢。链表读取慢,插入快,链表的每一个节点都保存的前后的指针,比较占内存
编辑于 2024-04-03 13:17:05
回复(0)
1
bbq了的垂耳兔很淘气
areaylist是基于数组实现的,分配的内存是连续的。基于索引查找的速度快。在尾部的插入性能正常,但是在其他部分插入时会有数据的移动,性能降低。可以利用cpu缓存 linkedlist是基于双向链表实现的,内存可以不连续。随机访问速度慢。在头尾的插入删除性能高,但是在中间进行插入和删除时性能低,因为在插入和删除时需要先进行查找。占用内存多
发表于 2022-10-21 18:28:29
回复(0)
1
慕小言
ArrayList的底层是用动态数组实现的,实现了RandomAccess、Serializable、Cloneable、List等接口,在操作的过程中会触发扩容,对数组容量进行扩充,第一次向集合中添加元素的时候,会初始化一个长度为10的数组,之后每一次添加数据都会提前判断数组是否已经满了,如果数组已满,就会先定义一个新的数组将元素拷贝,之后进行位运算将原来的长度变为之前的1.5倍,又将数组添加到扩容后的数组中,以此类推。因为数组可以使用下标索引,所以适用于查找较多的情况。LinkedList底层是基于双向链表实现的,可以实现队列、栈等数据结构,链表的每一个节点都存储一个数据值,访问的时候需要遍历每一个节点,指针需要从前一个节点指向后一个节点,以此类推,导致LinkEdList的添加效率高,查找效率很低
发表于 2022-08-30 11:16:34
回复(0)
0
牛客766045892号
Arraylist底层以数据存储数据,写入比较慢,读取比较快;LinkedList是以链表存储数据,写入比较快,读取比较慢
发表于 2024-05-14 16:49:28
回复(0)
0
又菜又爱玩的牛马
前者是List接口的实现类,底层数据结构是数组。后者是Queue和List的实现类,底层的数据结构是双向链表。前者由于存储的是数组,所以适合大量的下标查询,但不适合增删。后者则相反,不适合下标查询,但对于头和尾的增删的时间复杂度都是O(1)
发表于 2024-05-09 18:43:59
回复(0)
0
JKeKe
ArrayList 存储元素用的数据结构是数组。 LinkedList 存储元素用的数据结构是双向链表。链表的特点就是不限制长度、对插入,删除友好,但对查找不友好。查找等于是在做遍历。所以性能不好。
发表于 2024-04-29 00:02:23
回复(0)
0
钟情于风TuT
底层: ArrayList底层是数组(1.8之前占用内存多直接会进行创建,1.8之后会在第一次put时才创建),LinkedList底层是双向链表 适用场景: 前者查询快,后者添加和删除快
编辑于 2024-04-02 16:16:42
回复(0)
0
AERO316
arraylist底层是数组,而linklist底层是双向链表,对于数据的增删,如果是增删的是头尾的数据,则两个性能差不多,但是如果是不是头尾的数据,则linklist的性能、速度要比arraylist快。对于查询数据来说,因为arraylist底层是数组,所以查询速度arraylist势必linklist要快的
发表于 2024-03-30 23:25:48
回复(0)
0
牛客380258662号
区别: 底层实现: 数组 双向链表 效率: 查找效率高 增删效率高
发表于 2024-03-16 11:11:55
回复(0)
0
有礼貌的代码渣渣bbq了
编辑于 2024-03-08 09:53:02
回复(0)
0
说我这儿没问题啊的林北很爱刷美剧
ArrayList底层是基于动态数组实现的 linkedlist底层是基于链表实现的 两者都不是线程安全的 linkedList占的内存比ArrayLIst大 ArrayList查询效率高 LinkedList插入删除效率高
编辑于 2024-03-05 17:59:30
回复(0)
0
凛晨
1.ArrayList是基于数组,LinkedList基于双向链表的。 2.在查找和读取方面,ArrayList比LinkedList要快,时间复杂度为O(1),LinkedList为O(n)。 3.在插入和删除方面,LinkedList要优于ArrayList。因为当元素被添加入LinkedList时,不需要向ArrayList一样重新计算数组大小或者更新索引。 4.LinkedList比ArrayList更占内存,LinkedList的节点除了存储数据本身外,还存储了两个引用,一个指向前一个元素,一个指向后一个元素
编辑于 2024-01-14 14:48:35
回复(0)
0
牛客613278630号
底层实现。数组 和 单链表的区别 使用场景不同。数组查找速度快,根据索引快速定位,连标 需要一个个查找 动态数组 涉及到 自动扩容,需要一个新的1.5倍大小的数组,在copy过去
发表于 2023-11-29 16:13:01
回复(0)
0
牛客284619267号
ArrayList底层是数组实现,LinkedList底层是基于链表,都实现了list接口都是有序可重复,ArrayList默认容量是10,扩容是1.5倍,这样比较占内存读取快,下标访问,适合查找;LinkedList增删快,但是遍历LinkedList必须使用iterator迭代器,不能用for循环,每次for循环,get|(i)都要对list重新遍历,性能消耗大;不能用indexof 返回索引,如果结果是空,会遍历整个list列表
发表于 2023-11-13 22:15:55
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
147条回答
192收藏
2357浏览
热门推荐
相关试题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
游戏内数据分析涉猎的少,如何证明自...
评论
(1)
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题