C#基础之List内核结构

不确定能写多少,能写多少写多少,也是基本常用到的一些,像BinarySerach这些就没写出来,如果有这方面的书籍,麻烦留言告诉我一下,我自己找不到……谢谢


基本数据

继承了 X 个接口,给自己挖坑,接口留着以后说List泛型类
可以看到,默认初始容量为 4 ,使用 数组T[] 存储相应的数据

构造函数

默认构造函数,直接返回一个静态、只读、长度为0 的数组
在这里插入图片描述
带 容量 (Capacity ) 的构造函数,容量 Capacity 非负
在这里插入图片描述
带 集合 IEnumerable<T> collection 的参数,collection 不能为null
在这里插入图片描述
最后一行为空时,仍执行Add,若为引用类型,是可以将null添加到末尾的

字段:
Capacity

get 直接返回items.length,即数组长度
set 当容量<已存数据长度,发生异常,原因是重新设置容量时,如果列表已存在数据,将发生数组的复制。所以设置容量>数据长度时,申请新的数组,将原有数组复制过去
在这里插入图片描述

Count

返回字段_size

[index]

返回、设置数组 this._items[index] 的值,当set时,版本_version增一
在这里插入图片描述

函数
Add(T item)

确保空间够,不够基本以原有的 2 倍扩展
在这里插入图片描述
添加到末端,版本增一
在这里插入图片描述

AddRange(IEnumberable< T > collection)

调用 InsertRange(this._size, collection)

InsertRange(int index, IEnumerable< T > collection)

做安全性校验后,先把要插入的位置后的数据复制到后collection.Count的位置,再开辟新数组存储要插入的数据,再将数据插入到指定位置
在这里插入图片描述

Clear()

每一个数值置默认值,_size 为 0

Contains(T item)

遍历一遍,时间复杂度O(n)

CopyTo(*****)

直接使用Array.Copy(*****)

FindIndex(int startIndex, int count, Predicate< T > match)

最基本的FindIndex,供其他Find Exists FindIndex调用
作一遍遍历,使用 match 函数作匹配,时间复杂度O(n)
在这里插入图片描述

FindIndex(int startIndex, Predicate< T > match)

在这里插入图片描述

FindIndex(Predicate< T > match)

在这里插入图片描述

Exists(Predicate< T > match)

在这里插入图片描述

Find(Predicate< T > match)

在这里插入图片描述

FindAll(Predicate< T > match)

时间O(n),申请List默认空间为4,使用默认空间可能发生频繁的数组复制操作
在这里插入图片描述

FindLast(Predicate< T > match)

逆序遍历,时间复杂度O(n)
在这里插入图片描述

ForEach(Action< T > action)

为每一个数据执行action操作
在这里插入图片描述

GetRange(int index, int count)

申请空间为 count 的列表在这里插入图片描述

Insert(int index, T item)

直接插入,数组后this._size - index位后移一位
在这里插入图片描述

Remove(T item)

先查找Item的下标,然后通过下标移除
在这里插入图片描述

RemoveAt(int index)

在这里插入图片描述

RemoveRange(int index, int count)

在这里插入图片描述

ToArray()

申请新的数组空间,赋值返回

Sort()

Sort 排序,该结构自身不作实现
通过调用Array中的静态排序方法,而Array调用ArraySortHelper中的排序
在这里插入图片描述
_V4_5 表示框架的版本
该排序综合了多个排序,包括堆排序、快排等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值