码迷,mamicode.com
首页 > Web开发 > 详细

.NET源码分析之List

时间:2021-06-28 19:23:44      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:大于等于   for循环   方法调用   使用数组   数据   height   eal   属性   方法   

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方法实现如下图所示,是先将所有符合移除条件的元素通过前后位置交换的方式,全部替换到数组的尾部,这样需要移除的元素都是在一起并且是在数组的尾部,然后再通过Array的clear方法,将尾部的元素全部移除。

技术图片

 

.NET源码分析之List

标签:大于等于   for循环   方法调用   使用数组   数据   height   eal   属性   方法   

原文地址:https://www.cnblogs.com/zfg-565343033/p/14939606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!