当前位置: 首页 > wzjs >正文

官方网站找工作公众号金乡县住房与城乡建设局网站

官方网站找工作公众号,金乡县住房与城乡建设局网站,网站建设外出考察信息,销售网站建设推广List<T>是一个非常常用的泛型集合类&#xff0c;它位于 System.Collections.Generic 命名空间下&#xff0c;本质上是一个动态数组&#xff0c;它提供了一系列方便的方法来管理和操作元素&#xff0c;例如添加、删除、查找等。与传统的数组相比&#xff0c;List<T>…

List<T>是一个非常常用的泛型集合类,它位于 System.Collections.Generic 命名空间下,本质上是一个动态数组,它提供了一系列方便的方法来管理和操作元素,例如添加、删除、查找等。与传统的数组相比,List<T>可以根据需要动态调整大小,使用起来更加灵活。

.Net4.8 List<T>源码地址:
list.cs (microsoft.com)https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs

内部结构:

1.主要的字段属性:


_defaultCapacity:表示List默认的容量是4。当创建一个List对象且未指定初始容量时,会使用这个默认值。
_items:这是一个泛型数组,用于实际存储 List 中的元素。
_size:表示当前 List中实际存储的元素数量。它反映了列表中有效元素的个数
_version:用于记录 List的版本号。每当对列表进行添加、删除等修改操作时,这个版本号会增加。它主要用于在迭代列表时检测列表是否被修改,如果被修改则会抛出异常,以保证迭代的安全性。
在源码中可以看到对_version的操作如下:





在上述函数(不完全列举)中都有_version++的操作
_emptyArray:这是一个静态只读的空数组,用于在某些情况下表示空列表。

Capacity:返回或者设置List的容量。
Count:返回List的实际存储元素的数量

2.构造函数:

1.当使用无参构造函数创建List对象时,会将_items初始化为_emptyArray,

此时列表的初始容量为 0,当有元素添加进来时,会根据需要进行扩容。 
2. 指定初始容量的构造函数:允许指定List的初始容量。如果传入的容量小于 0,会抛出ArgumentOutOfRangeException的异常,如果容量为 0,则将_items初始化为_emptyArray;否则,创建一个指定容量的数组并赋值给_items。
3.从现有集合初始化的构造函数:该构造函数接受一个实现了 IEnumerable<T> 接口的集合作为参数。如果传入的集合为 null,会抛出 ArgumentNullException 异常。如果集合是 ICollection<T> 类型,会根据集合的元素数量创建相应大小的数组,并将集合中的元素复制到 _items 数组中;否则,会使用迭代器遍历集合,并通过 Add 方法逐个添加元素。
注:
ICollection<T>继承自IEnumerable

被C#中的一些容器类的继承,列举两个如下:

动态扩容机制:

list扩容一般发生在增加元素的时候,所以首先找到增加元素的函数,如下:

也就是说默认扩容为当前容量的 2 倍,若仍不足则直接扩容到所需的最小容量
也可以通过设置Capacity的大小,来动态的将原List数组的元素复制到新的数组中。

主要方法:

1.增加:

1.通过下标:

通过下标在数组末尾添加元素,只能在0到Count - 1的索引值之间设置,否则就会抛出异常

2.Add: 

3.AddRange: 增加一个集合中的元素,调用InsertRange实现

2.插入:

1.Insert:

2.InsertRange: 

 解释:1.如果传入的index比List中现有的元素少,则先把索引为Index到_size的元素复制到末尾

2.如果是自身 ,那么就把就从0开始,长度为index的所有元素,复制到开始索引为index处

3.如果不是自身,就将新传入的数据拷贝到开始索引为index的地方。

4.如果传入的是迭代器,直接循环插入到新列表中。

3.删除:

1.使用Clear:将内部数组元素直接清除

2.Remove

3.RemoveAt

将_Size减1,如果移除的数据索引值小于_size,则会将索引index+1到_size的数据复制到索引为index到_size - 1的位置,原索引为_size的位置赋值T数据类型的默认值。

4.RemoveRange:

5.RemoveAll:删除所有匹配项

解释: 

Predicate<T>是定义的一个委托,定义如下:

 代码使用如下:

a.RemoveAll(c => c != 0);//或者a.RemoveAll(this.isPredicate);bool isPredicate(int c)
{return c != 0;
}

6.TrimExcess:

作用:​
​​减少内部数组的容量​​:将 Capacity 调整为接近 Count 的值(但​​不一定完全等于​​Count)。
​​释放未使用的内存​​:当列表经过多次删除或容量远大于实际元素数量时,调用此方法可回收多余内存。

4.查找:

1.通过索引

2.Contains:直接使用for循环遍历每一个元素与目标元素是否相等。

3.BinarySearch(二分查找):此方法不支持搜索包含负索引的数组。 在调用此方法之前,必须对 array 进行排序。

4.Exists:调用FindIndex方法,传入一个匹配函数用于匹配元素是否符合条件

5.Find及其包含的方法: 

 6.IndexOf:

7.LastIndexOf:

5.排序:

Sort函数传入的比较器(IComparer<T>Comparison<T>)返回小于0的值表示小于,大于0的值表示大于,等于0的值表示两个数相等。
IComparer<T>:是一个接口

ComparerObj com = new ComparerObj();
a.Sort(com);
public class ComparerObj : IComparer<int>
{public int Compare(int x, int y){return x.CompareTo(y);}
}
//或者
// 默认升序排序(依赖 T 的 IComparable 实现)
a.Sort(Comparer<int>.Default);
// 反转默认顺序
a.Sort(Comparer<int>.Create((x, y) => y.CompareTo(x)));

Comparison<T>:是一个委托,当参数为其时传入一个比较方法即可。

 

   a.Sort(ComparisonMethod);int ComparisonMethod(int a , int b){return a.CompareTo(b);}

注:
1.对大型数据集,优先使用 Comparison<T> 委托(避免虚方法调用开销)。
2.List<T>.Sort 是​​不稳定排序​​,相等元素的顺序可能变化。
3.Sort 方法直接修改原列表,若需保留原顺序,先创建副本。

​特性​IComparer<T>Comparison<T>
​复用性​可封装为独立类,多次复用 通常用 Lambda,临时逻辑
​复杂度​适合复杂多条件排序适合简单单条件排序
​接口/委托​需实现接口直接传递委托
​框架集成​兼容更多 API(如 SortedList仅限接受委托的方法

6.反转:

7.拷贝:

http://www.dtcms.com/wzjs/554944.html

相关文章:

  • 建设工程安全管理网站企业网站的设计思路范文
  • dede个人网站什么网站可以接单做
  • 餐饮类网站模板贵阳网站优化公司
  • 国外大型门户网站最好看免费中文
  • 东莞南城网站开发公司电话做网站机构图用什么工具
  • 广西建设厅网站在线服务包头天亿网站建设公司
  • wordpress要不要放网站地图城乡和住房建设厅网站首页
  • app下载注册推广免费网站优化工具
  • photoshop+做网站logowordpress静态首页设置
  • 购买源码的网站网站用什么做关键词
  • c 做精品课程网站网站开发需要哪些技能
  • 网站建设与运营收入预算进入淘宝网官网首页电脑版
  • 普通企业网站建设互联网网站建设彭聪
  • 做下载类网站赚钱吗网页制作模块素材
  • dw网页制作素材网站蜘蛛网网站建设分析
  • 青岛建设管理局网站地铁网站建设特点
  • 网站开发程序员是做什么的益保网做推广网站吗?
  • 临沂市建设局网站公示wordpress文档结构
  • 手机网站专题长沙专业个人做网站哪家好
  • 展示型网站建设的标准大型服装网站开发
  • 吴桥县做网站价格网站建设的方案
  • 网站主流服务器语言永久免费网站建设系统
  • 淘宝客api同步到网站中国网站访问量排行
  • 孝感网站建设孝感一台虚拟主机能建设几个网站
  • 网站源码怎么弄拓者设计吧免费注册
  • 免费销售网站模板下载安装智能建站cms管理系统
  • 开封网站建设网站维护的工作内容
  • 龙港网南昌优化网站推广
  • 个人网站企业备案区别网络推广引流方法
  • 知名网站开发企业北京旅游攻略