arraylist和linkedlist的区别和使用场景

作者&投稿:拓别 (若有异议请与网页底部的电邮联系)
ArrayList和LinkedList的区别~

ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
LinkedList链表由一系列表项连接而成。一个表项总是包含3个部分:元素内容,前驱表和后驱表,如图所示:

在下图展示了一个包含3个元素的LinkedList的各个表项间的连接关系。在JDK的实现中,无论LikedList是否为空,链表内部都有一个header表项,它既表示链表的开始,也表示链表的结尾。表项header的后驱表项便是链表中第一个元素,表项header的前驱表项便是链表中最后一个元素。

拓展资料
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。
List 接口的大小可变数组的实现,位于API文档的java.util.ArrayList。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。
参考资料:百度百科-ArrayList词条

一、基本区别:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
二、ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:

1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

3.LinkedList不支持高效的随机元素访问。

4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

  1、ArrayList是基于数组实现的,其构造函数为:

  private transient Object[] elementData;

  private int size;

  ArryList初始化时,elementData数组大小默认为10;
  每次add()时,先调用ensureCapacity()保证数组不会溢出,如果此时已满,会扩展为数组length的1.5倍+1,然后用array.copy的方法,将原数组拷贝到新的数组中;

  ArrayList线程不安全,Vector方法是同步的,线程安全;

  2、LinkedList是基于双链表实现的:

  Object element;

  Entry next,
  previous;
  初始化时,有个header Entry,值为null;
  使用header的优点是:在任何一个条目(包括第一个和最后一个)都有一个前置条目和一个后置条目,因此在LinkedList对象的开始或者末尾进行插入操作没有特殊的地方;

  使用场景:

  (1)如果应用程序对各个索引位置的元素进行大量的存取或删除操作,ArrayList对象要远优于LinkedList对象;

  ( 2 ) 如果应用程序主要是对列表进行循环,并且循环时候进行插入或者删除操作,LinkedList对象要远优于ArrayList对象;


ArrayList和LinkedList的区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度...

arraylist和数组有什么区别
两者区别在于动态扩展性、类型安全性不同。1、动态扩展性:数组在创建时需要指定其长度,并且一旦初始化后,长度是固定的,需要改变数组的大小,则必须创建一个新的数组,并将原有数组中的元素复制过来。ArrayList是可动态扩容的容器,当添加更多的元素并且当前容量不足以容纳时,会自动增大内部数组的大小。

ArrayList和List有什么区别?
ArrayList和List两者有以下主要区别:实现方式:ArrayList是List接口的一个实现类,而List是一个接口。这意味着ArrayList可以作为List的实例使用,但反之则不成立。内部数据结构:ArrayList底层是用动态数组实现的,而List底层可能是链表或者动态数组。这使得ArrayList在随机访问元素时(即通过索引访问元素)速度更...

数组ArrayList和List之间的主要区别是什么?
【答案】:数组的容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或List的容量可根据需要自动扩充、修改、删除或插入数据。数组可以具有多个维度,而 ArrayList或 List< T> 始终只具有一个维度。但是,您可以轻松创建数组列表或列表的列表。特定类型(Object 除外)的数组的性能优于 ArrayList的...

arraylist和linkedlist的区别
arraylist和linkedlist的区别如下:1、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2、对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。什么场景下更适宜使用 LinkedList而...

arraylist和linkedlist的区别
一、基本区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。二、ArrayList和LinkedList在性能上各有优缺点,都有...

arraylist默认长度和扩容
1. 数组列表(ArrayList)的默认长度是10。2. 当数组列表中的元素数量超过其当前长度时,它会自动扩容以容纳更多元素。3. 扩容时,数组列表会创建一个新的、更大的数组,并将现有元素复制到这个新数组中。4. 默认情况下,扩容后的数组长度是原数组长度的1.5倍,但这个比例是可以配置的。

arraylist和linkedlist的区别
一、性质不同 1、arraylist:ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本。2、linkedlist:LinkedList 是一个继承于AbstractSequentialList的双向链表。二、作用不同 1、arraylist:提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。2、linkedlist:...

arraylist 和 linkedlist 有什么区别
ArrayList和LinkedList都实现了List接口,有以下的不同点:1、ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂...

ArrayList和数组的区别
而对于ArrayList,可以用add(Object)的形式让它自行管理大小。3、数组使用的是特殊的语法;ArrayList是个普通对象,所以不会有特殊的语法。其实ArrayList的底层数据结构就是一个数组,所以在已知所要创建数组需要的长度的前提下,使用数组在性能上可以有一定的提升。参考书籍:《Head First Java》

临县13042614864: ArrayList和LinkedList的区别
澹桦丽科: 一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针. 3.对于新增和删除操作add...

临县13042614864: ArrayList和LinkedList的区别?
澹桦丽科: ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要...

临县13042614864: arraylist和linkedlist的区别和使用场景 -
澹桦丽科: 1、ArrayList是基于数组实现的,其构造函数为:private transient Object[] elementData;private int size;ArryList初始化时,elementData数组大小默认为10;每次add()时,先调用ensureCapacity()保证数组不会溢出,如果此时已满,会...

临县13042614864: LinkedList和ArrayList的区别 -
澹桦丽科: ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下: 1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的.对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元...

临县13042614864: arraylist和linklist的区别 -
澹桦丽科: 1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要...

临县13042614864: 根据你的理解,请说明一下ArrayList和LinkedList的区别 -
澹桦丽科: ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用.LinkedList的优势在于在中间位置插入和删除操作,速度是最快的,O(1),而ArrayList是O(n-i)的.大道理请参看: LinkedList类 LinkedList实现了List接口,允许...

临县13042614864: ArrayList 和LinkdList的区别是什么?
澹桦丽科: ArrayList 实现List接口 ,随着向 ArrayList 中不断添加元素,其容量也自动增长 对于处理一列数据项,Java提供了两个类ArrayList和LinkedList, ArrayList的内部实现是基于内部数组Object[], 所以从概念上讲,它更象数组,但LinkedList的内部实...

临县13042614864: ArrayList和LinkedList底层实现的区别 -
澹桦丽科: ArrayList和LinkedList都实现了List接口,ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删.ArrayList与LinkList两者的区别:ArrayList是基于索引的数据接口,它的底层是数组.它可以以O(1)时间复...

临县13042614864: ArrayList和LinkedList都是线程安全的吗? -
澹桦丽科: 都是线程安全的. ArrayList和LinkedList的区别及其优缺点 ArrayList和LinkedList的大致区别: 1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为...

临县13042614864: ArrayList与LinkedList之间的联系 -
澹桦丽科: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网