在前面,我们需要存储很多类型一样的数据的时候,我们一般都使用数组来存储并且管理,但是数组有个缺点就是数组的大小是固定的,那么当我们不确定数据的个数的时候,该怎么存储呢?
我们可以使用集合类来进行存储数据,列表List就是集合类的一种。我们可以使用列表很方便的添加、删除数据以及其他的操作。
列表的创建
列表可以存储任何类型的数据,在创建列表对象的时候,我们首先要指定要创建的这个对象要存储什么类型的(泛型)
创建列表的语法规则
//1.创建列表方法1
List<int>scoreList = new List<int>();
new List<int>(){1,2,3};
new List<string>(){"one","two"};
//2.创建列表方法2
var scoreList = new List<int>();
这里要说的是,为什么列表可以存储不指定数量的数据呢?
列表内部数据实际上是使用数组进行的存储,一个空的列表内部会有一个长度为0的数组,当我们给列表添加元素的时候,列表的容量会扩大为4,如果再添加到第五个元素的时候,列表的大小会重新设置为8,以此类推,每次增加的容量为前一次的两倍。
那么列表的容量是怎么增加的?
每当列表的容量不够用的时候,它会创建一个新的数组,使用Array.Copy()方法将旧数组的元素全部复制到新数组中。但是为了节省时间,如果我们事先知道要存储的个数,可以利用列表的构造函数指定容量的大小。
在这里有个概念需要区分一下:
- 容量:容量是列表用于存储数据的数组的长度。
- 元素个数:元素个数是我们添加进去需要管理的数据的个数。
列表的两种遍历方式
用法和数组一样,不详细描述
List<int> list = new List<int>();
list.Add(12);
list.Add(34);
list.Add(56);
list.Add(78);
list.Add(90);
list.Add(453);
list.Add(342);
list.Add(8976);
//for循环遍历
for(int i = 0; i < list.Count; i++)
{
Console.Write(list[i] + " ");
}
Console.WriteLine();
//foreach循环遍历
foreach(int temp in list)
{
Console.Write(temp + " ");
}
操作列表的属性和方法
既然列表和数组一样能够存储数据,那么也可以操作数据。这里写出一些比较常用的列表操作的方法,如果想要查看列表其他的操作方法,可以在VS里将光标移到List上按F12键。
- Capacity获取容量大小
- Add()方法添加元素
- Insert()方法插入元素
- [Index]访问元素
- Count属性访问元素个数
- RemoveAt()方法移除指定位置的元素
- IndexOf()方法取得一个元素所在列表中的索引位置;LastIndexOf()从后往前搜索,搜索到满足条件的就停止,没有找到返回-1
- Sort()方法对列表中的元素进行从小到大排序
下面用一个随机生成的列表来实现上面所说的操作
class Program
{
static void Main(string[] args)
{
//1.生成随机列表
Console.WriteLine("生成随机列表");
var list = new List<int>();
Random r = new Random();
for(int i = 0; i < 10; i++)
{
int random = r.Next(0, 101);
list.Add(random);
}
foreach(int temp in list)
{
Console.Write(temp + " ");
}
Console.WriteLine();
Console.WriteLine("获取容量大小");
Console.WriteLine(list.Capacity);
//2.插入元素
list.Insert(3, 1000);
Console.WriteLine("插入元素'1000'后");
foreach (int temp in list)
{
Console.Write(temp + " ");
}
Console.WriteLine();
//3.访问元素
Console.WriteLine("访问第5个元素");
Console.WriteLine(list[4]);
//4.访问元素个数
Console.WriteLine("访问元素个数");
Console.WriteLine(list.Count);
//5.移除指定位置元素
Console.WriteLine("移除第5个元素");
list.RemoveAt(4);
foreach (int temp in list)
{
Console.Write(temp + " ");
}
Console.WriteLine();
//6.取得插入元素的位置
Console.WriteLine("取得插入元素的位置");
int index = list.IndexOf(1000);
Console.WriteLine(index);
//list.LastIndexOf()方法是从后往前搜索
//7.对列表进行排序
Console.WriteLine("对列表进行排序");
list.Sort();
foreach (int temp in list)
{
Console.Write(temp + " ");
}
Console.ReadKey();
}
}
泛型这个概念会在下一篇文章讲到,这篇文章所使用的列表都是使用了泛型的。