首页 > 试题广场 >

请你说说ArrayList和LinkedList的区别

[问答题]
ArrayList底层是数组实现的,数组是一组连续的内存单元,读取快(使用索引),插入删除慢(需要重新计算大小或是更新索引) LinkedList底层基于双向链表,读取慢,插入删除快;链表的每一个节点保存了数据值,和指向前一个节点的指针和指向后一个节点的指针。占内存
发表于 2022-04-24 15:34:25 回复(0)
ArrayList 是基于数组实现的,LinkedList是基于双向链表实现的,随机查询通过ArrayList查询,删除或增加多用LinkedList实现不需要重新计算索引和大小,LinkedList比Array更占内存,链表包括前后指向的引用和数据体
发表于 2022-04-28 17:04:25 回复(0)
相同点:ArrayList和LinkedList都都实现了List接口,它们都是有序集合,并且能存储重复的元素。它们都是线程不安全的 不同点:ArrayList底层是数组结构,而LinkedList底层是双向链表,因为LinkedList底层是链表,每个元素都要存放直接前驱和后继,每一个元素占用空间多,而ArrayList初始化容量是10.每次扩容为之前的1.5倍,可能会造成空间浪费。 应用上:ArrayList适用于增删较少,查询多的场景,而LinkedList适用于查询少,增删较多的场景。
发表于 2022-05-06 16:31:41 回复(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底层是数组(1.8之前占用内存多直接会进行创建,1.8之后会在第一次put时才创建),LinkedList底层是双向链表 适用场景: 前者查询快,后者添加和删除快
编辑于 2024-04-02 16:16:42 回复(0)
arraylist底层是数组,而linklist底层是双向链表,对于数据的增删,如果是增删的是头尾的数据,则两个性能差不多,但是如果是不是头尾的数据,则linklist的性能、速度要比arraylist快。对于查询数据来说,因为arraylist底层是数组,所以查询速度arraylist势必linklist要快的
发表于 2024-03-30 23:25:48 回复(0)
区别: 底层实现: 数组 双向链表 效率: 查找效率高 增删效率高
发表于 2024-03-16 11:11:55 回复(0)
编辑于 2024-03-08 09:53:02 回复(0)
ArrayList底层是基于动态数组实现的 linkedlist底层是基于链表实现的 两者都不是线程安全的 linkedList占的内存比ArrayLIst大 ArrayList查询效率高 LinkedList插入删除效率高
编辑于 2024-03-05 17:59:30 回复(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)
底层实现。数组 和 单链表的区别 使用场景不同。数组查找速度快,根据索引快速定位,连标 需要一个个查找 动态数组 涉及到 自动扩容,需要一个新的1.5倍大小的数组,在copy过去
发表于 2023-11-29 16:13:01 回复(0)
ArrayList底层是数组实现,LinkedList底层是基于链表,都实现了list接口都是有序可重复,ArrayList默认容量是10,扩容是1.5倍,这样比较占内存读取快,下标访问,适合查找;LinkedList增删快,但是遍历LinkedList必须使用iterator迭代器,不能用for循环,每次for循环,get|(i)都要对list重新遍历,性能消耗大;不能用indexof 返回索引,如果结果是空,会遍历整个list列表
发表于 2023-11-13 22:15:55 回复(0)
ArryList是基于数组实现的,LinkedList是基于链表实现的,所以arraylist读性能更好,linkedList插入和删除性能更好。
发表于 2023-11-02 14:13:01 回复(0)
数据结构: ArrayList是基于数组实现的,LinkedList是基于双向链表实现的 效率: ArrayList的查询的效率高于LinkedList,因为ArrayList的查询是根据索引来查询,而LinkedList的每次查询都需要指针从头开始查找 ArrayList的增加和删除要低于LinkedList,但ArrayList进行添加和插入时索引都需要向前或者向后移动(尾部删除和添加除外) 内存空间: ArrayList的内存空间要低于LinkedList,因为LinkedList不仅需要存储自身数据还要存储两个地址
发表于 2023-11-01 11:05:38 回复(0)
区别: 1.ArrayList的底层是基于数组实现的,LinkedList是基于双向链表实现的。 2.ArrayList的查询效率高,可通过下标就能获取到需要的数据,但进行插入、删除操作,效率会很慢,因为在这过程中,需要对集合里元素进行移动,所以ArrayList适用于需要频繁查询操作的。 LinKedList的查询效率低,但进行随机插入、删除操作,效率比较高,因为LinkList基于链表实现,每个节点保存着前后节点的指针,在执行操作时,不需要移动元素,所以适用用频繁更改的数据。 3. 从存储空间开看,LinkedList花费的空间要比ArrayList多,因为LinkedList要存放直接后继指针和直接前驱和数据。 4. ArrayList存放元素的分配内存地址空间是连续的,LinkedList分配的内存空间不一定连续,是随机的。
发表于 2023-10-18 19:55:41 回复(0)