集合类:数组的大小是固定的,有时候不方便,需要使用集合来管理,列表是集合类的一组,且可以方便的添加和删除数据。
创建和访问、插入数据。
static void Main(string[] args)
{
List<int> scoreList = new List<int>();
var scoreList1 = new List<int>();
var scoreList2 = new List<int>(){1,2,3};//有初始值的列表
scoreList.Add(12);//向列表中插入数据
Console.WriteLine(scoreList2[0]);//访问列表
Console.ReadKey();
}
列表内部的数据其实也是数组存储的,只不过长度会变化,空列表就是0.当列表的容量发生变化的时候,会创建新的数组,通过Array.Copy()将原来数组中的元素拷贝到新数组中,且是4,6,8,16这样变化的,不是一个个慢慢增加的。
List<int> scoreList = new List<int>();
for (int i = 0; i < 20;i++ )
{
Console.WriteLine("CAPACITY" + scoreList.Capacity + "COUNT" + scoreList.Count);
scoreList.Add(2);
}
Console.ReadKey();
所以如果事先知道列表需要大小,直接规定会比较方便。
List scoreList = new List(10);
而且这样的话,如果不够用,会按照设定的2倍扩大。下次就是20,40
设置容量:scoreList.Capacity=100;
容量和元素个数不一定一样,容量是数组的长度。
static void Main(string[] args)
{
var scoreList2 = new List<int>(){1,2,3};//有初始值的列表
Console.WriteLine(scoreList2.Capacity);
Console.WriteLine(scoreList2.Count);
Console.ReadKey();
}
结果是3 4
列表遍历
方法一:
var scoreList1 = new List() {1,2,35,78,900,57899,34,24 };
for (int i = 0; i < scoreList1.Count;i++)
{
Console.WriteLine(scoreList1[i]);
}
方法二:
var scoreList1 = new List() {1,2,35,78,900,57899,34,24 };
foreach(int temp in scoreList1)
{
Console.WriteLine(temp + " ");
}
其他功能
1.scoreList1.IndexOf();//搜索从零开始第一个相同数所在位置,从前往后搜索
var scoreList1 = new List<int>() {1,2,35,78,900,57899,34,24,35};
int index = scoreList1.IndexOf(78);//返回元素所在索引,这里返回3
Console.WriteLine(index);
2.scoreList1.LastIndexOf();//从后往前搜索
3.scoreList1.RemoveAt();//移除指定位置数据
var scoreList1 = new List<int>() {1,2,35,78,900,57899,34,24,35};
scoreList1.RemoveAt(0);
移除后变成了{2,35,78,900,57899,34,24,35};
4.scoreList1.Insert(6, -1);
var scoreList1 = new List<int>() {1,2,35,78,900,57899,34,24,35};
scoreList1.Insert(6, -1);//向指定位置插入数据
添加后变成了{1,2,35,78,900,57899,-1,34,24,35};
5.scoreList1.Sort();//从小到大排序列表