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]这种形式去访问数据,就是索引器,在泛型中常用该方法去访问。

时间: 2024-11-07 22:07:09

C#_集合和泛型的相关文章

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

面试题_关于Java泛型的面试题

1. Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中.那些拥有Java1.4或更早版本的开发背景的人 都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便.泛型防止了那种情况的发生.它提供了编译期的类型安全,确保你只能把正确类型的对象放入 集合中,避免了在运行时出现ClassCastException. 2. Java的泛型是如何工作的 ? 什么是类型擦除 ? 这是一道更好的泛型面试题.泛型是

集合与泛型

集合类负责存储一系列的个体,其集合的长度可能是不变的或者可变的.相比于普通的数组结构,集合类的功能更加具体. 集合类分为普通(非泛型)集合和泛型集合.泛型集合类的命名空间为集合的一个子命名空间:System.Collections.Generic.非泛型的集合中,所有的成员都被当作为object类型,不同的成员可以拥有不同的数据类型.而泛型的集合所有的成员类型都是相同的. 非泛型集合 所有非泛型集合都实现接口ICollection. 所有非泛型集合中的成员都是object. 集合类的基础接口IC

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。

普通集合和泛型集合的区别: 泛型集合与传统集合相比 类型更安全. 泛型集合无需装箱拆箱操作. 泛型的重要性. 泛型是未来五年的主流技术 ... 通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员.此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱. 下面的泛型类型对应于现有的集合类型: List 是对应于 ArrayList 的泛型类. Di

四、集合与泛型、委托与事件-----《大话设计模式》

一.集合与泛型   数组 集合(ArrayList) 泛型 优点 连续存储.快速从头到尾遍历和修改元素 使用大小可按需动态增加 类型安全:省去拆箱和装箱操作 缺点 创建时必须制定数组变量的大小: 两个元素之间添加元素比较困难 类型不安全,接受所有类型的数据: 导致一直进行拆箱和装箱操作,带来很大的性能消耗   public partial class Form1 : Form { IList arrayAnimal_list = new ArrayList(); //声明并初始化集合 IList

数组、集合、泛型解析——【新生入学系统】

一.概念(from 百科) 数组:把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标. 集合:集合是一组可变数量的数据项(可为0)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作. 泛型:在程序编码中一些包含参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象. 二.进化史 开始用内存中的一个位置映射一个值,用"变量"来使用这个值.进一步发展成,用变量来引用一组值,数组诞生.后来有了集合,它是更强的的数组,依

集合和泛型

本题是最基本的分段树操作了.或者一般叫线段树,不过好像和线段没什么关系,只是分段了. 不使用lazy标志,更新只是更新单点. 如果不使用分段树,那么更新时间效率只需要O(1),使用分段树更新效率就需要O(lgn)了. 但是不是用分段树,那么查询的时间效率是O(n),而分段树查询效率是O(lgn) 这就是amortize分摊了时间,而且lgn真的很快,数据不是非常巨大的时候,接近常数了. 故此本题需要使用分段树. #include <cstdio> class EnemyInfo { stati

基本数据类型(字符串_数字_列表_元祖_字典_集合)

基本数据类型(字符串_数字_列表_元祖_字典_集合) 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象,使用中括号表示.元组的内容不可变,可以包含任意对象,使用圆括号表示.元组 1 l = [1, 2, 3, '4', '5'] # 列表 2 l = list((1, 2, 3, '4', '5')) 3 4 t = (1, 2, 3, '4', '5') #

.NET基础 (09)常用集合和泛型

常用集合和泛型1 int[]是引用类型还是值类型2 数组之间如何进行转换3 解释泛型的基本原理4 什么是泛型的主要约束和次要约束 常用集合和泛型1 int[]是引用类型还是值类型 数组类型是一族类型,它们都继承自System.Array,而System.Array又继承自System.Object.所有数组的类型都是引用类型. 引用类型的数组和值类型的数组的内存分配: 2 数组之间如何进行转换 数组类型在符合条件的情况下可以进行隐式地转换,条件包括:数组维数必须相同:目标项目类型和源项目类型必须