C#List泛型列表

List<T>

一、引言

这个类实现了IList、ICollection、IEnumerable、IList、ICollection、IEnumerable接口。

前面的章节我们也简单的提到过List泛型集合类。现在我们复习一下。

首先,数组存储的数据类型是固定的,且长度也固定不变。很显然,这种特性对不同长度的存储需求来说无法满足。固引出集合的概念,其中List为泛型集合,可以面向任何数据类型。

二、创建列表

创建列表有多种表达,可以定义长度也可以不定义。可以定义时直接赋值,也可以后面用Add()来添加。

//创建列表方法1:
var myList=new List<int>();  //创建列表,类型为int,不指定长度
myList.Capacity=10;    //也可以通过属性来设置容量大小

//创建列表方法2:
List<int> myList2=new List<int>();  //创建列表,类型为int,不指定长度
myList2.Capacity=10;    //也可以通过属性来设置容量大小
myList2.Add(9);         //添加元素
myList2.Add(8);         //添加元素

//创建列表方法3:
var myList3=new List<int>(10);  //创建列表,类型为int,基础长度为10,不够则翻倍为20,再不够则翻倍为40。以此类推。

//创建列表方法4:
var myList4=new List<int>(){1,2,3};   //定义即赋值
//int[] myArray = new int[] { 1,2,3,4,5}; //普通数组定义
Console.WriteLine("myList4集合存储的元素个数为:"+myList4.Count); //输出为3

//创建列表方法5:
var myList5=new List<string>("one","two");

通过上面的例子,我们大概知道列表的创建的方法了。现有以下几点注意:
1、如果不指定列表大小或大小不够的情况下,则会根据存储数据的个数自动翻倍增加,即1、2、4、8、16。。。以此类推的翻倍。
2、列表内容超出大小后,其内部原理是将现有的T类型数组拷贝到翻倍后的新数组中。所以容量翻倍会带来一定的效率问题。
3、如果实现知道需要存储的数据大小的话,可以指定列表的大小。容量翻倍带来的性能损失问题。
4、如果不知道需要存储的数据大小的话,则尽量将容量设置大一些。这样减少容量翻倍的次数,也可以提高效率。
5、集合中可以通过Count的属性来读取现存数据的个数。
6、如果已将将元素全部添加到列表中了,且不希望添加风度哦的元素,就可以调用TrimExcess()方法,去除不需要的容量。
7、可以在集合的创建中顺便赋值。像素组一样。

三、添加元素

在二中的示例中就已经提到了,添加元素的办法。
一般而言列表添加元素有以下几个方式:

var myList = new List<int>() { 0,0,0};  //创建列表,类型为int,不指定长度
myList.Capacity=10;               //也可以通过属性来设置容量大小

//添加元素方法1:
List<int> myList2 = new List<int>() { 1,2,3};//创建列表,类型为int,不指定长度,并添加元素1,2,3
myList2.Capacity=10;              //也可以通过属性来设置容量大小

//添加元素方法2:
myList2.Add(9);                   //添加元素
myList2.Add(8);                   //添加元素

//添加元素方法3:
myList2.AddRange(myList);         //将现有的集合添加到末尾

//添加元素方法4:
myList2.Insert(1,33);             //从指定索引插入

//添加元素方法5:
myList2.InsertRange(4,myList);    //从指定索引插入集合


foreach (int i in myList2)
{
    Console.WriteLine(i);         //遍历集合
}

四、删除元素

删除元素的方式也有多种:

//方法1:
myList2.Remove(0);          //删除为值为0的第一个项

//方法2:
myList2.RemoveAt(0);        //删除索引为0的项

//方法3:
myList2.RemoveRange(2,2);   //删除从索引2开始长度为2的元素

//方法4:
myList2.Clear();            //删除所有元素

五、搜索元素

列表也可以搜索元素,具有如下几种方法:

//创建列表方法1:
var myList = new List<int>() {1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4};  //创建列表,类型为int,不指定长度

//方式1:
myList.IndexOf(1,0,15);   //在0-15范围内搜索1的第一次出现位置索引

//方法2:
myList.LastIndexOf(3);    //搜索3出现的最后一次的位置索引

//方法3:
myList.FindIndex();

//方法4:
myList.FindLastIndex();

//方法5:
myList.Find();

//方法6:
myList.FindLast();

上面的方法3到方法6中涉及到一个参数Predicate match,
其中Predicata 是个委托,该委托返回一个布尔值,并且需要将T当做参数。如果Predicata委托返回true就表示有一个匹配元素,并且找到相应的元素。

Predicate委托定义如下:

public delegate bool Predicate (T obj);

发布了50 篇原创文章 · 获赞 0 · 访问量 863

猜你喜欢

转载自blog.csdn.net/weixin_40786497/article/details/104146759