C#中级教程学习笔记004-泛型、创建自己的MyList

本文是C#中级教程的一部分,详细介绍了泛型的概念和使用,如列表List的创建、操作及性能优化。同时,通过实例讲解了如何创建自定义的MyList,实现包括Add、Insert等基本操作,以及Sort等方法,帮助读者深入理解泛型和自定义集合类的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

4. 泛型-创建自己的MyList

4.1 列表List

4.2 泛型

4.3 创建自己的MyList


4. 泛型-创建自己的MyList

        当我们有很多类型一样的数据的时候,前面我们一般使用数组来进行管理,但是这样有个缺点就是数组的大小是固定的。

        如果我们很多类型一样的数据,比如游戏得分,我们可以集合类来进行管理,比如列表List,我们可以使用列表List很方便的添加数据,删除数据还有其他对数据的操作

4.1 列表List

4.1.1 列表List的创建和使用

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

           List<int> scoreList = new List<int>();

                     new List<int>(){1,2,3}

                     new List<string>(){"one","two"}

           var scoreList = new List<int>();

      

        2,往列表中插入数据

           scoreList.Add(12);

           scoreList.Add(45);

        3,如何取得列表中的数据?列表中的数据跟数组有点相似,索引从0开始 ,可以通过索引来访问

           scoreList[0] //访问添加到列表中的第一个数据

4.1.1.1 Example:列表List的创建和使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 列表List的创建和使用

namespace Lesson_4_1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> scoreList = new List<int>();  // 创建一个空的列表,通过<xxx>里面的xxx来指明列表保持的数据类型
            var scoreList2 = new List<int>();  // 通过匿名类型var,创建一个空的列表
            var scoreList3 = new List<int>() { 1, 2, 3 };  // 创建一个列表,里面的初始值有三个分别为 1 2 3

            scoreList.Add(23);  // 向列表中插入数据
            scoreList.Add(66);
            Console.WriteLine(scoreList[0]);  // 根据索引访问数据
            // Console.WriteLine(scoreList[6]);  // 访问不存在的元素时,会报异常

            Console.ReadKey();
        }
    }
}

4.1.2 列表的更多内容

        1, 列表内部数据是使用数组进行的存储,一个空的列表内部会有一个长度为0的数组,当给列表中添加元素的时候,列表的容量会扩大为4,如果添加第5个的时候,列表的大小会重新设置为8,如果添加第9个元素,列表容量会扩大为16,依次增加。当列表的中的容量发生改变的时候,它会创建一个新的数组,使用Array.Copy()方法将旧数组中的元素复制到新数组中。为了节省时间,如果事先知道要存储的数据的个数,就可以利用列表的构造函数指定列表的容量大小,比如下面的

              List<int> intlist = new List<int>(10);创建了一个初始容量为10的列表,当容量不够用的时候,每次都会按照原来容量的2倍进行扩容。

              我们可以通过Capacity属性获取和设置容量

              intList.Capacity = 100;

        可以看出,List内部处理,跟C++里面的Vector容器是一样的:元素满时,2倍容量的创建新的数组,并将旧的复制到新容器中

        如果,知道List元素数目最大值,建议在一开始就直接建立一个最大容量:new List<int>(maxCount),这样在后面修改元素时,就不会进行扩容复制操作,是提升性能的一个思路。

        2,注意容量和列表中元素个数的区别:容量是列表中用于存储数据的数组的长度通过Capacity获取,列表中的元素是我们添加进去需要管理的数据,通过Count获取。

4.1.2.1 Example:List的 Capacity 和 Count

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// List中的 Capacity 和 Count

namespace Lesson_4_2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();

            Console.WriteLine("list.Capacity = {0}, list.Count = {1}", list.Capacity, list.Count);

            for (int i = 0; i < 10; ++i)
            {
                list.Add(i);
                Console.WriteLine("i ------ list.Capacity = {0}, list.Count = {1}", list.Capacity, list.Count);
            }

            Console.ReadKey();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号:程序喵星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值