百度网站关键词优化,专做丰田车货款的网站,定制开发网站 推广,用dw做网站流程列表
数组可以管理大量数组#xff0c;但缺点是无法更变容量。 创建小了不够用#xff0c;创建大了浪费空间。 无法预测需要多少大小的时候#xff0c;可能范围越大#xff0c;就会浪费越多的空间。
所以#xff0c;你可能会想要一种可以扩容的东西#xff0c;代替数组…列表
数组可以管理大量数组但缺点是无法更变容量。 创建小了不够用创建大了浪费空间。 无法预测需要多少大小的时候可能范围越大就会浪费越多的空间。
所以你可能会想要一种可以扩容的东西代替数组。 列表就能做到这件事。
创建
泛型列表的构造器可以填入一个数组代表初始长度。 也可以直接传入一个可迭代的东西据此初始化列表。 也可以什么都不填。
Listint list1 new Listint();
Listint list2 new Listint(10);int[] arr { 9, 4, 8, 6, 2, 0 };
Listint list3 new Listint(arr);添加元素
列表使用Add方法添加元素。 在调用构造器时可以使用对象初始化器添加元素。
Listint list2 new Listint() { 6, 9, 8 };list2.Add(0);
list2.Add(2);
list2.Add(9);
list2.Add(6);使用AddRange可以一次添加一堆元素参数是一个可迭代类型
list2.AddRange(arr);列表还可以从中间插入元素
list2.Insert(6,-1);//将元素-1插入到索引为6的位置。原本在6的元素会被挤到后面去
list2.InsertRange(2,arr);//将可迭代类型的值插入到索引为2的位置。原来在2位置的元素会被挤到后面去删除元素
List使用RemoveRemoveAtRemoveAllRemoveRange方法来删除元素 在删除元素后后面的内容会向前补齐。
list2.Remove(0);//遍历元素直到找到第一个和这个元素相等的元素。移除他。如果真的找到并移除了就返回true
list2.RemoveAt(5);//移除指定索引处的元素
list2.RemoveAll(ss5);//移除所有满足条件的元素
list2.RemoveRange(2,5);//从索引为2的位置开始连续移除5个元素访问元素
列表访问元素和数组一样使用索引器进行访问。 但不能超过元素数量不是数组长度。 在构造器填入的数字是初始数组的长度。 列表的原理其实是帮你管理并自动扩容一个数组。
list2[2] 16;
int i1 list2[3];遍历
列表使用Count属性代替数组的Length验证条件。
for (int i 0; i list2.Count; i)
{Console.WriteLine(list2[i]);
}只有数组才有长度一说他创建就是以长度为准不可更改在内存中以一个整块存在。 这些复杂数据结构只会说元素数量Count。因为他们可能是零散的。
设置容量
列表在没包含任何元素时所有同泛型的列表会共用一个长度为0的数组。 在需要扩容的时候创建一个容量翻倍且至少为4的数组。 意味着如果多次扩容也会有很高的性能损失。 所以建议在创建列表时尽量预判需要的长度。
Console.WriteLine(list2.Capacity);//背后数组的长度可以获取或设置。但不能设置小于当前元素数量的值
list2.TrimExcess();//如果元素数量小于数组长度的90%裁剪数组使得和元素数量匹配
list2.Clear();//清空元素。这不会改变后背数组的长度。方便的方法
List有很多和Linq功能相似的方法可以直接使用而无需调用Linq。
list2.Sort();//list可以直接调用排序方法而无需像数组一样使用数组基类调用
list2.Sort((a, b) b - a);//虽然没有降序方法但你可以使用委托自定义排序list2.Reverse();//反转整个列表list2.IndexOf(5);//查找和参数相同的第一个元素。并返回他的索引。如果找不到返回-1
list2.FindIndex(s s 5);//找到第一个满足条件的元素返回他的所有如果没找到返回-1list2.Contains(3);//判断是否存在这样的元素
list2.Find(ss5);//找到第一个满足条件的元素并返回
list2.FindAll(s s 5);//找到所有满足条件的元素构成一个新的List返回list2.Foreach(s Console.WriteLine(s));//遍历所有元素并执行一个委托。
//相较于自己调用foreach循环区别在于临时变量是可以修改的不会影响原元素。
//并且委托的return只是用来结束委托的。而foreach循环中return会结束当前方法。