首页 > 试题广场 >

请你说说ArrayList和LinkedList的区别。

[问答题]
请你说说ArrayList和LinkedList的区别。
ArrayList底层是数组实现的,数组是一组连续的内存单元,读取快(使用索引),插入删除慢(需要重新计算大小或是更新索引) LinkedList底层基于双向链表,读取慢,插入删除快;链表的每一个节点保存了数据值,和指向前一个节点的指针和指向后一个节点的指针。占内存
发表于 2022-04-24 15:34:25 回复(5)
相同点:ArrayList和LinkedList都都实现了List接口,它们都是有序集合,并且能存储重复的元素。它们都是线程不安全的 不同点:ArrayList底层是数组结构,而LinkedList底层是双向链表,因为LinkedList底层是链表,每个元素都要存放直接前驱和后继,每一个元素占用空间多,而ArrayList初始化容量是10.每次扩容为之前的1.5倍,可能会造成空间浪费。 应用上:ArrayList适用于增删较少,查询多的场景,而LinkedList适用于查询少,增删较多的场景。
发表于 2022-05-06 16:31:41 回复(1)
ArrayList 是基于数组实现的,LinkedList是基于双向链表实现的,随机查询通过ArrayList查询,删除或增加多用LinkedList实现不需要重新计算索引和大小,LinkedList比Array更占内存,链表包括前后指向的引用和数据体
发表于 2022-04-28 17:04:25 回复(0)
ArrayList : 是基于动态数组,连续存储内存,适合下标访问(随机访问),扩容机制:因为数组长度固定超出长度存数据时需要新建数组,然后将老数组拷贝到新的数组,如果不是尾插入还要将元素后移,使用尾插发并预先提供集合的容量可以极大地提高性能,甚至可以超过 LinkedList(需要创建大量Node对象) LinkedList:基于链表的实现,存储内存是分散的,适合做插入和删除操作,查询慢,需要遍历链表,LinkedList连链表必须使用Iterator不能使用 for 循环,因为 for 循环是根据get(i) 获取某一元素时都需要对List进行重新遍历,应能消耗极大。 另外不要使用IndexOf()等返回元素索引,并利用其进行遍历,使用IndexOf进行遍历,当结果为空时会返回整个链表。
发表于 2022-05-06 16:08:31 回复(0)
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)
arrayList底层是基于数组实现的,数组是一组连续的内存单元,读取,写入快。linkedList是基于双向链表实现的,读写慢,插入删除快。
发表于 2022-05-11 10:55:53 回复(0)
arraylist底层是数组实现,linkedlist底层是双向链表,数组是一块连续的内存单元,读取快,插入慢。链表读取慢,插入快,链表的每一个节点都保存的前后的指针,比较占内存
编辑于 2024-04-03 13:17:05 回复(0)
areaylist是基于数组实现的,分配的内存是连续的。基于索引查找的速度快。在尾部的插入性能正常,但是在其他部分插入时会有数据的移动,性能降低。可以利用cpu缓存 linkedlist是基于双向链表实现的,内存可以不连续。随机访问速度慢。在头尾的插入删除性能高,但是在中间进行插入和删除时性能低,因为在插入和删除时需要先进行查找。占用内存多
发表于 2022-10-21 18:28:29 回复(0)
ArrayList的底层是用动态数组实现的,实现了RandomAccess、Serializable、Cloneable、List等接口,在操作的过程中会触发扩容,对数组容量进行扩充,第一次向集合中添加元素的时候,会初始化一个长度为10的数组,之后每一次添加数据都会提前判断数组是否已经满了,如果数组已满,就会先定义一个新的数组将元素拷贝,之后进行位运算将原来的长度变为之前的1.5倍,又将数组添加到扩容后的数组中,以此类推。因为数组可以使用下标索引,所以适用于查找较多的情况。LinkedList底层是基于双向链表实现的,可以实现队列、栈等数据结构,链表的每一个节点都存储一个数据值,访问的时候需要遍历每一个节点,指针需要从前一个节点指向后一个节点,以此类推,导致LinkEdList的添加效率高,查找效率很低
发表于 2022-08-30 11:16:34 回复(0)
ArrayList的底层是 数组,LinkedList的底层是双向链表, 数组的查询快但是增删慢,双向链表的增删快但是查询慢。数组的每一次扩容都是1.5倍,可能会有多余空间,双向链表的节点存储了向前向后指针,占用空间大。两个线程均不安全。
发表于 2026-01-18 21:12:43 回复(0)
1、ArrayList底层是数组,LinkedList底层结构是双向链表 2、ArrayList随机访问速度快,增删数据慢,LinkedList查询速度慢,增删数据快 3、ArrayList是内存连续的数组,LinkedList内存不连续。
发表于 2025-12-26 09:07:22 回复(0)
ArrayList基于动态数组实现,查询快,增删慢; LinkedList基于双向链表实现,增删快,查询慢(随机访问需遍历)。 ArrayList内存连续但可能预留空间,容量不足时扩容1.5倍,LinkedList每个节点含前后指针更占内存。 都线程均不安全,适用场景取决于读写操作比例。
发表于 2025-12-17 15:41:25 回复(0)
arraylist是数组实现的,而linkedlist是双向链表实现的,数组是连续的存储空间,而链表是通过指针进行存储,数组适用于查询多,增删少的场景,而链表相反
发表于 2025-12-09 19:06:49 回复(0)
1、ArrayList是基于数组实现的,而LinkedList底层基于链表 2、ArrayList支持快速随机查询,而LinkedList不支持 3、ArrayLIst的插入跟删除受元素位置影响,LinkedList则不受影响 4、ArrayLIst的元素占用空间比LinkedList小
发表于 2025-11-15 15:46:19 回复(0)
ArrayList基于数组实现,读元素速度很快,插入删除慢,LinkedList基于双向链表,读元素慢,插入和删除快。
发表于 2025-11-14 14:27:13 回复(0)
arrayList底层是数组,linkeList底层是双向链表,两者都实现了List接口,都是有序集合,都是线程不安全的,arraylsit查询快,增删慢,适合用于查多写少的场景,linkeList查询慢增删快,适合查少写多的场景,arraylist每次扩容都是之前的额1.5倍,容易造成内存浪费,linkelist每次扩容都会包含之前的指针,更站内存
发表于 2025-11-11 09:55:29 回复(0)
ArrayList底层使用的是Objict数组,空间浪费主要体现在list列表的尾部会预留一定的容量空间,LinkedList底层使用的是双向链表数据结构,空间浪费主要体现在每一个元素都需要消耗比ArrayList更多的空间。
发表于 2025-11-07 17:10:08 回复(0)
首先,ArrayList和LinkedList的相同点都是实现了List接口,都是有序集合,并且可以存储重复元素,以及都不是线程安全的; 其次,ArrayList的底层数据结构是数组,随机访问速度快,增删元素需要移动元素位置,内存空间连续; LinkedList的底层数据结构是双向链表,随机访问速度慢,需要遍历链表,增删元素速度快,由于链表节点包含头尾指针更占内存; 再者,ArrayList适用于增删少,查询多的场景,LinkedList适用于增删多,查询少的场景。
发表于 2025-11-03 15:19:33 回复(0)
ArrayList的底层数据结构是动态数组,数组是一串连续的内存,随机访问快,增删元素慢,因为需要移动大量元素,内存不足是自动扩容默认是原来数组容量的1.5倍,LinkedList底层数据结构是双向链表,链表元素增删快,随机访问速度慢,占内存
发表于 2025-11-02 18:02:52 回复(0)
ArrayList 底层是数组 读取快 插入删除慢 LinkedList底层基于双向链表 读取慢 插入快 占内存
发表于 2025-10-28 16:22:58 回复(0)