泛型之列表的创建和使用

在前面,我们需要存储很多类型一样的数据的时候,我们一般都使用数组来存储并且管理,但是数组有个缺点就是数组的大小是固定的,那么当我们不确定数据的个数的时候,该怎么存储呢?
我们可以使用集合类来进行存储数据,列表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键。

  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();

        }
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值