C#集合篇之--列表List<T>

列表

.NET Framework 为动态列表提供了泛型类List 这个类实现了 Llist、ICollection、IEnumerable、IList 、ICollection IEnumerable 接口。

1、创建列表

调用默认的构造函数就可以创建列表对象:var int intList=new List(); 这是一个int 类型的List 泛型类。

使用默认的构造函数创建一个空列表。当我们将元素添加到列表中后,列表的容量将会扩大为可接纳4个元素。如果添加了第5个元素,列表的大小就重新设置为8个元素。如果8个元素还不够,列表的大小就会重新设置为包含16个元素。也就是每当列表容量不够时,列表就会将容量设置为原来的2倍。

Q:那列表扩大容量之后,是在原内存上扩大,还是重新分配一个新的内存块呢?

A:当列表的容量改变了。整个集合就要重新分配到一个新的内存块中。

List 泛型类的实现代码中,使用了一个T 类型的数组。通过重新分配内存,创建一个新数组,Array.Copy() 方法将旧数组中的元素复制到新数组中。 显然,在这个过程中,是需要消耗性能的。所以,为节省时间,若事先知道列表中元素的个数。就可以用构造函数定义其容量,如,创建一个容量为10个元素的集合。

List<int> intList = new List<int>(10); 

使用capcity 属性可以获取和设置集合的容量。

intList.Capcity = 20 ;

注意
集合的容量和元素的个数不同。集合中的元素的个数可以用Count属性读取。容量总是>=元素个数。

如果已经将元素添加到集合中。且不希望添加更多的元素,就可以调用TrimExcess()方法,去除不需要的容量,但是,因为重新定位需要时间,所以如果元素个数超过容量的90%,TrimExcess() 方法就什么也不做。

intList.TrimExcess();

2、添加元素

Add()方法可以给列表添加元素。

var intList= new List<int>();
intList.Add(1);
intList.Add(2);
var stringList= new List<string>();
stringList.Add("白衣");
stringList.Add("胜雪");

使用List类的AddRange() 方法,可以一次给集合添加多个元素。因为AddRange()方法的参数是IEnumerable类型的对象,所以也可以传递一个数组。

3、插入元素

使用Insert() 方法可以在指定的位置插入元素。

 racers.Insert(3, new Racer(6, "Phil", "Hill", "USA", 3));

方法InsertRange() 提供了插入大量元素的功能,类似于AddRange() 方法。如果索引集大于集合中的元素个数。就抛出ArrumentOutOfRangeException 异常。

4、访问元素

实现了IListIList 接口的所有类都提供了一个索引器。所以可以使用索引器,通过传递元素号来访问元素。第一个元素可以用索引值0来访问。指定 students[3],可以访问列表中的第四个元素。

Student stu=students[3];

可以使用Count 属性确定元素个数,再使用for 循环遍历集合中的每个元素,并使用索引器访问每一项,

for(int i=0;i<students.Count;i++)
{
   Console.WriteLine(students[i]);
}

因为IList 集合实现了IEnumerable接口。所以也可以使用foreach 语句遍历集合中的元素

foreach(var student in students)
{
  Console.WriteLine(student);
}

5、删除元素

students.Remove(2)

RemoveRange()方法可以从集合中删除许多元素,它的第一个参数指定了开始删除的索引,第二个参数指定开始删除的元素个数

int index = 2; //开始删除的索引
int count = 5; //删除的元素个数
students.RemoveRange(index,count);

要从集合中删除有指定特性的所有元素,可以使用RemoveAll().
要删除集合中的所有元素。可以使用Clear() 方法。

6、搜索

可以使用的方法有:IndexOf()、LastIndexOf()、FindIndex()、FindLastIndex()、Find() 和FindLast()
检查元素是否存在Exists()方法。

参考:C# 高级编程

你可能感兴趣的:(C#/.NET,c#,list,java)