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

建站申请重庆seo网站哪家好

建站申请,重庆seo网站哪家好,网站免费主机,潍坊外贸网站建设今天来介绍一下List内部的存储结构,话不多说直接开始。 内部数据 List内部采用了连续数组的方式存储数据,其中包含了三个重要的成员变量,示例如下: // 用于存储数据的数组 internal T[] _items; // 列表中实际包含数据的数量 int…

        今天来介绍一下List内部的存储结构,话不多说直接开始。

内部数据

        List内部采用了连续数组的方式存储数据,其中包含了三个重要的成员变量,示例如下:

// 用于存储数据的数组
internal T[] _items;
// 列表中实际包含数据的数量
internal int _size;
// 版本号,用于迭代时检测是否修改
internal int _version;
  • T[] _items:存储数据的数组,实际存储数据的地方。
  • int _size:实际包含数据的数量,用于记录_items实际存储数据的数量。
  • int _version:版本号,用于检测List迭代时_items是否被修改。

        

数据操作

        添加数据

        List在添加数据时是在尾部添加,添加时会对_size数量增加,示例代码如下:

public void Add(T item)
{_version++;T[] array = _items;int size = _size;if ((uint)size < (uint)array.Length){_size = size + 1;array[size] = item;}
}

        当_items容积不够时,List会进行扩容,会先计算扩容后容积的大小,默认会扩容到原来的2倍,然后会创建一个新的newItems数组,并将原先的_items数据拷贝进去,示例代码如下:

internal void Grow(int capacity)
{int newCapacity = _items.Length == 0 ? DefaultCapacity : 2 * _items.Length;if ((uint)newCapacity > Array.MaxLength) newCapacity = Array.MaxLength;if (newCapacity < capacity) newCapacity = capacity;Capacity = newCapacity;
}public int Capacity
{get => _items.Length;set{if (value != _items.Length){if (value > 0){T[] newItems = new T[value];if (_size > 0){Array.Copy(_items, newItems, _size);}_items = newItems;}}}
}

        

        移除数据

        List在移除数据的时候较常用的两个方法是Remove()RemoveAt()Remove()的执行过程也是先找到数据所在位置的索引,然后在调用RemoveAt()方法,示例代码如下:

public bool Remove(T item)
{int index = IndexOf(item);if (index >= 0){RemoveAt(index);return true;}return false;
}

        RemoveAt()的执行过程是将传入索引位置之后的数据拷贝前移,数据拷贝后再将最后一位设置成默认值,示例代码如下:

public void RemoveAt(int index)
{_size--;if (index < _size){Array.Copy(_items, index + 1, _items, index, _size - index);}if (RuntimeHelpers.IsReferenceOrContainsReferences<T>()){_items[_size] = default!;}_version++;
}

        

        插入数据

        List在插入数据时会调用Insert(int index, T item)接口,插入数据的执行过程与移除数据比较相似,示例代码如下:

public void Insert(int index, T item)
{// Note that insertions at the end are legal.if ((uint)index > (uint)_size){ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert);}if (_size == _items.Length) Grow(_size + 1);if (index < _size){Array.Copy(_items, index, _items, index + 1, _size - index);}_items[index] = item;_size++;_version++;
}

        

        访问数据

        在List中访问数据最常用的方式是索引访问,通过this[int index]直接获取修改数据。由于数据存储在_items数组中,访问数据时唯一需要注意的只有越界问题。示例代码如下:

public T this[int index]
{get{// Following trick can reduce the range check by oneif ((uint)index >= (uint)_size){ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException();}return _items[index];}set{if ((uint)index >= (uint)_size){ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException();}_items[index] = value;_version++;}
}

使用场景

        基于前面对List的介绍,List的使用可以归纳如下:

  • List提供了灵活的数组存储空间,当数组元素数量不确定时可以选择List。
  • List提供了灵活的访问机制,通过索引值即可访问数据,在需要随机访问数据时可以选择List。
  • List是连续的数组空间存储数据,在遍历数据时有较快的速度。
  • List是连续的数组空间,Add()RemoveAt(int lastIndex)都是在数组尾部进行,尾部数据可以进行频繁操作。
  • List插入和移除数据会进行数组拷贝,所以不建议频繁使用Insert(int index, T item)RemoveAt(int index)方法,需要频繁在头部/中间插入删除可以使用LinkedList<T>

相关文档链接

List官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.list-1?view=net-9.0

List源码地址:

https://source.dot.net/#System.Private.CoreLib/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs

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

相关文章:

  • 长沙做网站大概多少钱wordpress alchem
  • 宁陵网站建设商务网站运营与管理
  • 长沙 建网站广州网站建设首选快优
  • 中山网站建设推荐青岛代理记账有限公司
  • 做贷款网站网站第三方统计工具下载
  • 百度快照 查看指定网站如何上传网站内容
  • 常见的网站类型有哪些新类型 网站
  • 口碑好网站建设电话网站建设费是业务宣传费吗
  • dw如何做网站后台设计学校排名中国
  • 站长统计ios做网站谁家做的好
  • 沧州商城网站建设网站开发预算编制
  • 网站seo排名深圳南山logo设计公司
  • 邢台移动网站建设费用莱阳网站制作
  • 网站建设会议网站建设案例价位
  • 域名没有网站可以备案高端品牌vi设计公司
  • 安徽制作网站的公司哪家好包头市做网站公司
  • 宝安建设投资集团网站电厂cms系统是什么
  • 企业网站自助建设金华网站建设外包
  • 网站公告栏设计wordpress下载远程图片大小
  • 用博客网站做淘宝客网站开发大概多少钱
  • 天河区住房和建设水务局官方网站湘潭seo优化公司
  • 网站专业好找工作吗做曖免费网站
  • o2o 网站框架网站模板
  • 我国酒店网站建设存在的问题t恤图案设计网站
  • 公司建设一个网站首页自己做的网页怎么连接到网站
  • 网站的第二域名怎么用如何利用阿里云做网站
  • 个人网站空间大小境外网站开发
  • 程序员必知的网站外国贸易平台
  • 教研组网站的建设做系统的图标下载网站
  • 怎么做网站界面设计seo排名优化排行