CS4L7——List<>

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
List<>                    //泛型列表类,需要在实例化时指定存储元素类型,由于不使用object,存储值类型可避免装箱拆箱
list<>.Add() //添加元素
list<>.AddRange() //范围添加元素
list<>.Insert() //插入
list<>.Remove() //移除某个元素,有重复移除第一个
list<>.RemoveAt() //移除某个位置上的元素
list<>.Clear() //清空
list<>.Contains() //列表是否存在某个元素
list<>.IndexOf() //正向查找元素位置,从头找,找到的返回值是下标,若找不到则返回 -1,如果有重复就会返回第一个
list<>.LastIndexOf() //反向查找元素位置,从尾找,找到的返回值是下标,若找不到则返回 -1,如果有重复就会返回第一个
list<>.Count //列表元素数量
list<>.Capacity //列表元素容量

List<>

List<>​ 是一个C#帮我们封装好的类,它的本质是一个 可变类型 的 泛型数组
List<>​ 类帮助我们实现了很多方法,比如 泛型数组 的增删查改

使用 List<>​ 需要引用 System.Collections.Generic​ 这个命名空间

实例化一个 List<>​ 必须要指明它要装载什么类型的元素

1
2
3
4
5
6
7
8
9
10
11
using System.Collections.Generic;

class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
List<string> list2 = new List<string>();
List<bool> list3 = new List<bool>();
}
}

增删查改

增加只能增加指定好的类型

1
2
3
4
5
6
7
8
9
List<int> list = new List<int>();
List<string> list2 = new List<string>();

//增加只能增加指定好的类型
list.Add(1);
list.Add(2);
list.Add(3);

list2.Add("123");

范围增加

可以范围增加(批量增加),增加只能增加指定好的类型

1
2
3
4
5
List<string> list2 = new List<string>();
List<string> listStr = new List<string>();
listStr.Add("123");
listStr.Add("234");
list2.AddRange(listStr);

插入

1
2
3
4
5
6
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Insert(0, 999);
Console.WriteLine(list[0]);

输出:

1
999

移除指定元素 重头找 找到就删(所以如果有多个这样的元素,就会先删第一个)

1
2
3
4
5
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(1);
list.Remove(1);

移除指定位置的元素

1
2
3
4
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.RemoveAt(0);

清空

1
2
3
4
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Clear();

通过索引器,即可得到指定位置的元素

1
2
3
4
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
Console.WriteLine(list[0]);

输出:

1
1

查看元素是否存在

1
2
3
4
5
6
List<int> list = new List<int>();
list.Add(1);
if (list.Contains(1))
{
Console.WriteLine("存在元素 1");
}

输出:

1
存在元素 1

正向查找元素位置

从头找,找到的返回值是下标,若找不到则返回 -1​,如果有重复就会返回第一个

1
2
3
4
5
6
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(2);
Console.WriteLine(list.IndexOf(2));
Console.WriteLine(list.IndexOf(5));

输出:

1
2
1
-1

反向查找元素位置

从末尾开始找,找到的返回值是下标,若找不到则返回 -1​,如果有重复就会返回最后一个,返回的是从头开始的索引数!

1
2
3
4
5
6
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(2);
Console.WriteLine(list.LastIndexOf(2));
Console.WriteLine(list.LastIndexOf(5));

输出:

1
2
2
-1

通过索引器修改元素的值

1
2
3
4
5
List<int> list = new List<int>();
list.Add(1);
Console.WriteLine(list[0]);
list[0] = 123;
Console.WriteLine(list[0]);

输出:

1
2
1
123

遍历

得到元素数量

1
2
3
4
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
Console.WriteLine(list.Count);

输出:

1
2

得到当前列表容量

1
2
3
4
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
Console.WriteLine(list.Capacity);

输出:

1
4

for 循环索引器遍历

1
2
3
4
5
6
7
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}

输出:

1
2
1
2

foreach 迭代器遍历

迭代器遍历(只有实现迭代器(#TODO#​)的类可以用这种方法)

1
2
3
4
5
6
7
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
foreach (var item in list)
{
Console.WriteLine(item);
}

输出:

1
2
1
2