首页 > 代码库 > C#_集合和泛型

C#_集合和泛型

集合


 在实际编程中,常会按一定要求来处理和计算一组一组的数据,如堆栈操作、队列操作或系列数据的增、删、改、查。C#提供了数组类型来进行管理,但是这样有个缺点就是数组的大小是固定的。我们可以通过集合类来进行管理。数据集合类都位于System.Collections命名空间中,使用时需引用。

数组和集合的对比:

技术分享

 

1、ArrayList类

ArrayList是一个可动态扩充容量的集合。

ArrayList 数组集合名 = new ArrayList();

 

 技术分享

技术分享

 

 

2、Hashtable类

哈希表Hashtable是一种数据字典,它将数据作为一种Key/Value保存。

Hashtable 哈希表名 = new Hashtable();

 

 技术分享

 

键值对均是object类型,使用<hasntable实例名>[键],将返回object类型的,由键对应的数据。转化强转,使用里氏转换原则

3、Stack类

Stack这种集合按照“先进先出”或“后进先出”的原则来操作元素,称作栈集合。

Stack 栈名 = new Stack();

 

 技术分享

 

4、Queue类

Queue 队列名 = new Queue();

 

 技术分享

 

集合类泛型


 

为什么引用集合类泛型?

非泛型的集合,将成员对象存储为Object类型的实型,这样可以存储任何类型的元素,但是增加装箱和拆箱的性能开销。

static void Main(string[] args){
  ArrayList array = new ArrayList();
  int i = 10;
  array.Add(i);
  i =array[0];//此处报错,因为集合储存Object类型,需要(int)强制类型转化
}

以约束访问特定数据类型的方法,避免了集合的繁琐操作,专门处理某种类型。

1、List<T>类

创建列表(列表可以存储任何类型的数据,在创建列表对象的时候首先要指定你要创建的这个列表要存储什么类型的)(泛型)

 List<T>集合名称 = new List<T>();

T为元素类型,向集合添加元素需要受到T的约束。

技术分享
 List<int> scoreList = new List<int>(); 
 List<int> scoreList = new List<int>(){1,2,3} 
 List<int> scoreList = new List<string>(){"one","two"} 
 var scoreList = new List<int>();
声明例子

List<T>泛型集合与ArrayList集合使用方法类似。

2、Dictionary<K,V>类

按照键/值对的形式保存特定元素。在Dictionary<K,V>的泛型集合中,能够按照类似哈希表存储数据的方式保存数据,且能对保存的数据进行类型检查。在Dictionary中的任何键都必须是唯一的,键不能为空。但是如果,值类型为引用类型,值类型可以为Null。

Dictionary<键类型,值类型>集合名称 = new Dictionary<键类型,值类型>();

 

3、Stack<T>类

与stack集合类似。

4、Queue<T>类

与Queue集合类似。

 

泛型


为什么引入泛型?

通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。

泛型的使用灵活多变,应用广泛。

1、泛型类定义

定义一个泛型类就是指的是,定义一个类,这个类中某些字段的类型是不确定的,这些类型可以在类构造的时候确定下来。

技术分享
class ClassA<T1,T2>{
    private T1 a;
    private T2 b;
    public ClassA(T1 a,T2 b){
        this.a = a ;this.b = b;
    }
    public string GetSum(){
        return a+“”+b;
    }
}
泛型类的定义

2、泛型方法

定义泛型方法就是定义一个方法,这个方法的参数的类型可以是不确定的,当调用这个方法的时候再去确定方法的参数的类型。

技术分享
public static T GetSum<T>(T a,T b){
    return a+b;
}
泛型方法的定义

索引器:通过[index]这种形式去访问数据,就是索引器,在泛型中常用该方法去访问。

C#_集合和泛型