目录
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();
}
}
}