摘要:浅谈泛型集合类List<T>的概念和用法。
编程语言:C#
编程环境:Visual Studio 2019
目录
概念
List<T>泛型集合类位于System.Collections.Generic命名空间下,通过对对象进行封装可以实现强类型集合。T就是索要使用的类型,它可以是简单类型(int、string、bool等),也可以是用户自定义类型,或者结构体。不同于普通数组,泛型集合可以自动按需动态调整集合的大小。List<T>在C#编程中作用灵活,使用广泛,是必须要掌握的数据结构之一。
List<T>初始化
分别以简单类型和用户自定义类型为例,讲述泛型集合List<T>的初始化。用户自定义类型如下:
//用户自定义类型Students(学生)
public class Students
{
public string Name;//学生姓名
public int Score;//学生成绩
}
首先是创建空集合:
List<int> intlist = new List<int>();//创建普通类型int泛型空集合
List<Students> students = new List<Students>();//创建用户自定义类型Students泛型空集合
如何赋初值呢?如同初始化数组一样,在new语句的括号后插入大括号{},输入相应的初值即可对List<T>赋初值,如下:
List<int> intList1 = new List<int>() { 0, 1, 2, 3, 5 };//创建带有初值的普通类型int泛型集合
List<Students> students1 = new List<Students>()
{
new Students{Name="张三",Score=90},
new Students{Name="李四",Score=91}
};//创建带有初值的用户自定义类型Students泛型集合
List<T>常用属性
- Capacity:用于获取或设置(可读可写)当前List的容量。当数量超过容量时,这个值会自动增长。(注:所以List<T>的优点之一就是不会超限,同时带来的缺点就是容易冗余分配容量,可通过设置这个值来减少容量)
- Count:获取(只读)集合中元素数量。
- this[index]:获取或设置(可读可写)索引值index处的元素。(注:与数组索引访问方式相同)
List<T>常用方法
增删类
- Add(item):将单个同类对象添加到集合的结尾处,用法如下:
List<Students> students2 = new List<Students>();//创建用户自定义类型Students泛型空集合
Students student3 = new Students();//新建一名学生对象
student3.Name = "王麻子";//赋姓名
student3.Score = 94;//赋分数
students2.Add(student3);//将其添加至集合结尾
- AddRange(items):将同类对象集合添加至集合的结尾处,用法如下:(注:添加的同类对象集合不仅可以是List<T>集合,也可以是数组)
List<int> intList2 = new List<int>() { 4 };//创建带有初值的普通类型int泛型集合
List<int> intList3 = new List<int>() { 0, 1, 2, 3, 5 };//创建带有初值的普通类型int泛型集合
int[] intArray1 = new int[3] { 3, 6, 9 };//创建带有初值的int型数组
intList2.AddRange(intList3);//将集合intList3添加至intList2结尾处
intList2.AddRange(intArray1);//将数组intArray1添加至intList2结尾处
- Insert(index,item):将单个同类对象插入指定索引index处。
- InsertRange(index,items):将同类对象集合插入指定索引index处。(注:添加的同类对象集合不仅可以是List<T>集合,也可以是数组)
- Remove(item):移除集合中对象item的第一个匹配项,匹配顺序为索引从小到大,匹配成功即移除对象,并返回true,若匹配不成功,则集合里没有等于item的元素,返回false。(注:值得注意的是,若集合里有多个这样的item,则只会移除索引号最小的那一个)
List<int> intList4 = new List<int>() { 0, 1, 2, 3, 0 };//创建带有初值的普通类型int泛型集合
intList4.Remove(0);//执行此语句将会移除集合intList4的索引号等于0处的0
- RemoveAt(index):移除集合中index索引对应的元素。
- RemoveRange(index,count):从集合index索引开始数起,删除它后面count个元素。(注:包含index索引对应的元素自身)
List<int> intList5 = new List<int>() { 0, 1, 2, 3, 0 };//创建带有初值的普通类型int泛型集合
intList5.RemoveRange(1, 2);//执行此语句intList5变为{0,3,0}
- Clear():移除集合中所有元素。(注:相应的容量也会自动清零)
查找类
- Contains(item):判断元素item是否在集合中,存在返回true,不存在返回false,用于条件判断。
- IndexOf(item):返回集合中对象item的第一个匹配项的索引号,匹配顺序为索引从小到大,匹配失败返回-1。
- LastIndexOf:返回集合中对象item的第一个匹配项的索引号,匹配顺序为索引从大到小,匹配失败返回-1。
其他
- CopyTo(Array):从目标数组的开头开始,将整个集合复制到兼容的一维数组里。(注:它会覆盖掉目标数组里原有的元素)
- Reverse():将集合里元素的顺序反转,即倒序。
- ToArray():将集合复制到新的数组中,返回这个数组。
- TrimExcess():将集合容量设置为集合元素实际数目。
List<T>的遍历
对于List<T>的遍历可用for循环,也可用foreach循环,后者使用更多,遍历基本语法为
List<int> intList6 = new List<int>() { 0, 1, 2, 3, 0 };//创建带有初值的普通类型int泛型集合
foreach(int i in intList6)
{
//foreach遍历,无需考虑遍历长度,遍历长度自适应,遍历规则只能从前往后,i为遍历对象
}
for(int i = 0; i < intList6.Count; i++)
{
//for遍历,需考虑遍历长度,遍历规则可设置,intList6[i]为对象
}
小结
本文简单讲述了List<T>泛型集合的初始化、属性、方法和遍历,对于它的使用还有很多,比如很多方法(本文未列举)都用到了lambda表达式进行运算,这也是非常重要的,小编现在对于那一块还没吃透,以后会专门讲lambda表达式的用法。
每篇寄语
前方的路是迷惘的,但脚下的路却是真实的,只有一步一个脚印,把路踩在脚下朝前走,总不会让你失望的。