一集合类 列表List
1、创建一个列表List<int> scoreList = new List<int>(); 第一种方式
var scoreList1 = new List<int>(); 第二种方式,使用匿名类
List<>中加的为这个列表的类型
2、给创建的列表一个初始值
var scoreList2 = new List<int>() { 1, 2, 3 }; 里面的初始值为 1 2 3
List<int> scoreList2 = new List<int>(){1, 2, 3};
3、插入数据和访问数据
scoreList.Add(12);
Console.WriteLine(scoreList[0]);
与数组一样都有索引,都是从 0 开始。
4、列表的更多内容
List<int> intlist = new List<int>(10);
创建了一个初始容量为10的列表,当容量不够时,每次都会按照原来容量的2倍来扩容
intlist.Capacity = 100;
我们可以通过 Capacity 获取和设置容量
注意: 容量和列表中元素的区别,容量是列表中用于存储数据的数组的长度
列表的元素是我们添加进去需要管理的数据,通过Count获取
Console.WriteLine("Capacity:" + scoreList.Capacity
+ "Count:" + scoreList.Count);
输出: Capacity:4 Count:1
因为当元素为 0 个,容量也为 0; 当元素为 1 个,容量为 4;
当元素为 5 个,容量为 8; 当元素为 9 个,容量为 16;
二、列表的遍历
1、for循环,遍历所有索引,通过索引访问列表中的元素for(int i = 0; i < list.Count ; i++)
{
循环体;
}
2、foreach遍历
foreach(int i in list)
{
循环体;
}
三、操作列表的属性和方法
1、Capacity 获取容量大小2、Add() 方法添加元素
3、Insert() 方法插入元素
scoreList.Insert( 插入的索引位置, 要插入的元素的数据 );
注意:要插入的索引位置不能大于原有的元素的个数
4、[index] 访问元素
5、Count 属性访问元素个数
6、RemoveAt() 方法移除指定位置的元素
scoreList.RemoveAt( 要移除的索引位置 );
7、IndexOf() 方法取得一个元素所在列表中的索引位置
int index = scoreList.IndexOf( 列表中某个元素的数据! );
注意:如果输入的参数在列表中不存在,会返回 -1
8、LastIndexOf() 上面的方法是从前往后搜,这个是从后往前搜
注意:如果列表中有相同的元素数据: IndexOf()从前往后
LastIndexOf()从后往前
9、Sort() 对列表中的元素进行从小到大的排序
四、泛型
1、什么是泛型通过参数化类型来实现在同一份代码上操作多种数据类型,利用"参数化类型"将类型
抽象化,从而实现灵活的复用
2、声明与使用
class ClassA<T>
{
private T a;
private T b;
public ClassA(T a, T b)
{
this.a = a;
this.b = b;
}
public string GetSum()
{
return a+""+ b;
}
}
var o1 = new ClassA<int>(12, 34);
string s = o1.GetSum();
var o2 = new ClassA<string>("www.","ClassA.com");
string a = o2.GetSum();
这样这个类中定义的字段就能用各种不一样的类型来定义了
3、泛型方法
就是定义一个方法,这个方法的参数的类型可以是不确定的,可以当调用这个方法时
再确定方法和参数的类型
public static string GetSum<T>(T a,T b)
{
return a + "" + b;
}
Console.WriteLine(GetSum(12,34));
Console.WriteLine(GetSum(12.3,12.4));
Console.WriteLine(GetSum("www.","Vlasss"));
这样这个方法的参数就可以使用不同类型来定义
注意:多个泛型
public static string GetSum<T,A>(T a,T b,A c)
{
return a + "" + b+""+c;
}
Console.WriteLine(GetSum<int,float>(12,34,4.5f));
方法与类都能使用多个泛型,如果只有一个泛型调用方法时可以不声明这是个什么类型
如果有多个泛型,就要全都声明类型
用什么泛型声明的字段,在使用中就使用什么泛型定义的类型
例子: A c 就要用 float 类型,值要输入 4.5f;
通过[index]这种形式访问数据,就是索引器