列表List和泛型

来源:互联网 发布:js 重置按钮 编辑:程序博客网 时间:2024/05/20 13:15

一集合类 列表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]这种形式访问数据,就是索引器   
原创粉丝点击