.NET源码分析之List

本文详细解析了List类的构造函数(包括无参、带大小和IEnumerable类型)、添加和插入方法(如Add、Insert)、查找方法(Find)以及删除操作(Indexof、Remove和RemoveAll),特别强调了其底层基于Array的实现机制和Capacity/Count属性的作用。

List类图
在这里插入图片描述

上图展示了List的继承和实现关系。

构造函数

List构造函数一共有3个,

1、无参构造,创建的集合是一个空数组。

2、带集合大小的构造,如果传入的是有效的集合大小,则创建对应大小的数组。

3、实现了IEnumerable类型的构造,将传入的数据copy到新的数组中去。

PS:List底层的实现是通过Array数组来实现的(private T[] _items)。
在这里插入图片描述
Count:这个属性最常用,指的是当前集合中元素的数量。
Capacity:这个属性代表了当前集合所使用数组的容量,上面也提示过了,List的底层是数组,数组在声明的时候是需要有一个固定长度的,Capacity指的就是数组的长度,Capacity的值一定是大于等于Count

方法

AddInsert类方法

往集合中添加数据,最终是往数组_items中增加数据

下图展示的是Add方法的源码,从源码中可以看到

刚初始化的空集合第一次添加数据时,默认设置数组的长度_defaultCapacity为4,当给集合添加第5个元素时,底层实现数组则是创建一个新数组,新数组的长度是当前数组的2倍,然后将当前数组的数据拷贝到新数组中,最后将第5个新元素加入数组中;
在这里插入图片描述
Find类方法

从源码中可以看到Find方法的根子是使用for循环来实现的,传入的是lambda表达式进行对比。
在这里插入图片描述
Indexof类方法

indexof类方法调用的是Array数组的indexof方法,最终使用for循环进行查找下标。
在这里插入图片描述
Remove方法
remove方法实现是使用数组的copy来实现的,比如当前集合5个元素,要移除第3个元素,实际结果是将数组的第4个元素到最后一个元素拷贝然后粘贴替换到数组的从第3个元素开始,这样就把第三个元素给替换掉了,然后再把数组的最后一个元素给置为默认。
在这里插入图片描述
RemoveAll方法

removeAll方法实现如下图所示,是先将所有符合移除条件的元素通过前后位置交换的方式,全部替换到数组的尾部,这样需要移除的元素都是在一起并且是在数组的尾部,然后再通过Arrayclear方法,将尾部的元素全部移除。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值