(看这一篇就够了)数组、List、ArrayList、LinkedList

首先集合是数组的改进版,集合的底层也是数组,再次分别来了解一下集合数组的区别。
数组在内存中是连续存储的,索引速度快,赋值修改元素也方便。但是数组的声明时必须要明确size,若是长度过长会导致内存浪费,若是过短会导致数据溢出及丢失的问题。所以在数组长度未知的情况下c#最先引入了ArrayList来解决这个问题。

ArrayList能动态扩充长度,所以预先未知具体size这对之后的结果并不会产生影响。数据的添加,插入,移除。
ArrayList list = new ArrayList();这样的写法会导致装箱拆箱,因为没有指明数据类型,所以在操作集合里的数据时,它会自动转化成Object交替完再恢复成元数据。底层的转化看不见但是会引起很大的性能损耗。会解决上面的问题,引入了泛型,在<>里提前写明数据类型,使得在编译时就能识别出来。---------->ArrayList list = new ArrayList();
在这里插入图片描述

List是一个接口,而ArrayList是List的实现类,所以接口不能被实例化。

ArrayList和LinkedList的大致区别如下,ArrayList底层是实现了动态数据扩充内存的机制,所有的数据存储内存也是连续的,所以它能按照地址去读取数据,从具体的位置索引出数据给你,但是在中间插入和删除数据,意味着后面的元素全部都要向前或者向后变位置,这样是很耗时的。LinkedList,它是基于单向列表实现的,每个节点都包含一个节点对象跟一个next引用,next引用指向下一个对象,插入一个元素只需要改变next指向,开头是first引用,指向第一个元素,所以在集合中任何位置插入删除锁花费的时间都是一样的,查询慢。

总结:ArrayList适合查询多插入删除少的应用情景,而LinkedList适合相反的。


如何确定什么场景下使用什么:
在这里插入图片描述

为什么Linkedlist中间的速度这么慢??

在这里插入图片描述
//

因为LinkedList在插入时需要向移动指针到指定节点, 才能开始插入,,一旦要插入的位置比较远,LinkedList就需要一步一步的移动指针, 直到移动到插入位置,这就解释了, 为什么节点值越大, 时间越长, 因为指针移动需要时间。

而ArrayList是数据结构, 可以根据下标直接获得位置, 这就省去了查找特定节点的时间,所以对ArrayList的影响不是特别大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值