泛型之列表的创建和使用

来源:互联网 发布:怎么给js里传参 编辑:程序博客网 时间:2024/06/08 19:42

在前面,我们需要存储很多类型一样的数据的时候,我们一般都使用数组来存储并且管理,但是数组有个缺点就是数组的大小是固定的,那么当我们不确定数据的个数的时候,该怎么存储呢?
我们可以使用集合类来进行存储数据,列表List就是集合类的一种。我们可以使用列表很方便的添加、删除数据以及其他的操作。

列表的创建
列表可以存储任何类型的数据,在创建列表对象的时候,我们首先要指定要创建的这个对象要存储什么类型的(泛型)
创建列表的语法规则

//1.创建列表方法1List<int>scoreList = new List<int>();                     new List<int>(){1,2,3};                     new List<string>(){"one","two"};//2.创建列表方法2var 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键。

  1. Capacity获取容量大小
  2. Add()方法添加元素
  3. Insert()方法插入元素
  4. [Index]访问元素
  5. Count属性访问元素个数
  6. RemoveAt()方法移除指定位置的元素
  7. IndexOf()方法取得一个元素所在列表中的索引位置;LastIndexOf()从后往前搜索,搜索到满足条件的就停止,没有找到返回-1
  8. 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();        }    }

泛型这个概念会在下一篇文章讲到,这篇文章所使用的列表都是使用了泛型的。

阅读全文
0 0