当我们有很多类型一样的数据的时候,前面我们一般使用数组来进行管理,但是这样有个缺点就是数组的大小是固定的。如果我们很多类型一样的数据,比如游戏得分,我们可以集合类来进行管理,比如列表List,我们可以使用列表List很方便的添加数据,删除数据还有其他对数据的操作。
由于列表操作需要用到泛型,简单介绍一下泛型的概念。通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。
列表本质是一个大小可变的数组。列表内部数据是使用数组进行的存储,一个空的列表内部会有一个长度为0的数组,当给列表中添加元素的时候,列表的容量会扩大为4,如果添加第5个的时候,列表的大小会重新设置为8,如果添加第9个元素,列表容量会扩大为16,依次增加。当列表的中的容量发生改变的时候,它会创建一个新的数组。
接下来通过例子了解一下列表的使用
接下来通过数组创建一个我们自己定义的列表:
namespace 创建MyList
{
class MyList<T>
{
private int count;
private T[] array;
//构造函数(有参)
public MyList(int size)
{
if (size >= 0)
{
array = new T[size];
}
else
{
throw new Exception("数值不符合规范!");
}
}
//构造函数(无参)
public MyList()
{
array = new T[0];
}
//定义容量
public int Capacity
{
get { return array.Length; }
}
//定义实际长度
public int Count { get { return count; } }
//添加元素方法
public void Add(T item)
{
if (count == Capacity)
{
if (Capacity == 0)
{
array = new T[4];
}
else
{
T[] tempArray = new T[count * 2];
Array.Copy(array, tempArray, count);
array = tempArray;
}
}
array[count] = item;
count++;
}
//添加所以其
public T this[int index]//是一个属性
{
get
{
if (index >= 0 && index <= count - 1)
{
return array[index];
}
else
{
throw new Exception("索引超出范围!");
}
}
set { array[index] = value; }
}
//定义插入方法
public void Insert(int index, T item)
{
if (index >= 0 && index <= count - 1)
{
if (count == Capacity)
{
T[] tempArray = new T[count * 2];
Array.Copy(array, tempArray, count);
array = tempArray;
}
for (int i = count; i >index; i--)
{
array[i] = array[i - 1];
}
array[index] = item;
count++;
}
else
{
throw new Exception("索引超出范围!");
}
}
}
}