C#10基础语法 ---集合

465 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

前言

今天我们来复习C#10的基础语法内容,今天讲解一下集合的内容,一起来看看吧!

集合&字典的初识

01.集合的使用

  • 集合与数组比较类似,都用于存放一组值

1.1 数组的优劣分析

优势
  • 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单。
劣势
  • 在数组的两个数据间插入数据很麻烦。
  • 在声明数组的时候, 必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。

1.2 ArrayList的使用

  • ArrayList是.NET Framework提供的用于数据存储和检索的专用类
  • 它是命名空间System.Collections下的一部分
ArrayList的优势
  • ArrayList 的大小是按照其中存储的数据来动态扩充与收缩的
  • 在声明ArrayList对象时并不需要指定它的长度
  • ArrayList可以很方便的进行数据的添加,插入和移除
ArrayList arrayList=new ArrayList();
arrayList.Add(123);     //将数据新增到集合结尾处
arrayList.Add("abc");   //将数据新增到集合结尾处
arrayList[2]=345;       //修改指定索引的数据
arrayList.RemoveAT(0);  //移除指定索引处的数据
arrayList.Remove(123);  //移除内容为123的数据
arrayList.Insert(0,"hello world");    //再指定索引处插入数据

从上面示例看,ArrayList好像是解决了数组中所有的缺点,那么它应该就是完美的。可是在C#2.0后又会出现了List集合,这是为何?

ArrayList的劣势
  • ArrayList在存储数据时是使用object类型进行存储的
  • ArrayList不是类型安全的,使用时很可能会出现类型不匹配的错误
  • 就算都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理
  • ArrayList的存储存在装箱和拆箱操作,导致其性能低下

1.3 装箱与拆箱的概念

  • 装箱就是将比如int类型或者string等不同的对象通过隐式转换赋给object对象。
int i = 123;
object o= 1;  
  • 拆箱就是将object对象通过显示转换赋给int类型的变量
object o=123;
int i = (int)o;  
  • 装箱与拆箱的过程会产生较多的 性能损耗。
  • 正是因为ArrayList存在不安全类型与装箱拆箱的缺点,所以在C#2.0后出现了泛型的概念。
  • 泛型的概念在此先不多做表述,为便于大家记忆,可以简单理解成:限制集合只能够存储单一类型数据的一种手段。

1.4 List集合

  • 目前我们只需要学习List集合这一 种类型即可,以此为突破口,以后再学习其他集合就会非常容易
List集台的声明
  • List 集合与ArrayList 由于都继承成了相同的接口,故使用与ArrayList 相似。
  • 在声明List集合时,需要同时为其声明List集合内数据的对象类型
  • 示例: List<int> intList = new List();

所谓接口目前可以简单理解成限制和规定类型行为类型方法的一种手段

List<int> list = new List<int>();   // 第一种初始化方式
list.Add(123);      // 新增数据到结尾处
List<int>  intList = new List<int>  // 第二种初始化方式
{
    123,
    456,
    789
};
intList[2] = 345;
intList.RemoveAt(0);    // 删除指定索引处的数据
intList.Remove(123);    // 删除内容为123的数据
intList.Insert(0, 6688);

上例中如果我们往List集合中插入string宇符"hello world",系统就会报错,且不能通过编译。这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题

思考
  • 在上一节“类的使用"中我们知道,int本身也是一 个类型,int类型声明的变量接受int类型的数据, int类型可以指定List集合的数据类型。那么我们自己创建的类型是否可以限定List集合的数据类型呢?

    • 答案是:可以。
总结
  • 集合与数组比较类似,都用于存放一组值
  • 集合中提供了特定的方法能直接操作集合中的数据,并提供了不同的集合类来实现特定的功能
  • 简单的说就是数组的升级版。他可以动态的对集合的长度(也就是集合内最大元素的个数)进行定义和维护
  • List泛型的好处指通过允许指定泛型类或方法操作的特定类型,减少了类型强制转换的需要和运行时错误的可能性,泛型提供了类型安全,但没有增加开销。

总结:还是那句话,一步步来,加油!