C#初学者教程系列14:集合

本文是C#初学者简单教程,这是第14篇。感谢观看,记得关注我,后续还有更多教程文章,谢谢。

本文环境为Visual Studio 2019。

一、集合的定义

将具有同一类型的多个对象放到一个组中进行管理,则是集合。集合可以自由的添加或者删除一个对象,还可以遍历甚至使用索引器。

 

二、集合跟数组的区别

数组是固定大小的,而集合可以进行扩大或者缩小。

数组是强类型的,但集合一旦泛型化,则也一样是强类型。Object在C#中是弱类型,其它为强类型。

 

三、C#中的集合

C#中的集合都将实现IEnumerable和ICollection接口。ICollection是集合接口,IEnumerable声明为可迭代,即可以获得一个迭代器对象(IEnumerator)。

C#中的集合类特别多,举几个例子,当然不止这些:

            Collection
            Hashtable
            Stack
            Queue
            ArrayList
            List
            Dictionary<string, string>
            SortedList
            BitArray
            ConcurrentDictionary

 

四、声明一个集合

以最典型的集合类List来说,要声明它是很简单的,由于集合都是类,所以声明一个类,就是new一个对象:

List<string> list = new List<string>();

 

五、操作一个集合

对于List这个集合类来说,添加使用Add方法,删除使用Remove方法,索引器使用[index],遍历直接foreach即可。代码如下:

同理,其它的集合类,也是大同小异的,你总能从C#的api类库中找到对应的方法,虽然略有差异。

 

六、C#的集合类的命名空间

C#中的集合类位于下面3个命名空间中:

  • System.Collections.Generic 
  • System.Collections.Concurrent 
  • System.Collections 

 

七、System.Collections 

System.Collections 命名空间中的类不会将元素作为特别类型化的对象存储,而是作为 Object 类型的对象存储。所以该命名空间下的集合不是强类型的。

主要有:

ArrayList    表示对象的数组,这些对象的大小会根据需要动态增加。
Hashtable    表示根据键的哈希代码进行组织的键/值对的集合。
Queue    表示对象的先进先出 (FIFO) 集合。
Stack    表示对象的后进先出 (LIFO) 集合。




 

 

 

八、System.Collections.Generic

Generic 中文翻译为泛型,也就是通用类型。所以该命名空间下的集合类,都是<>泛型的。

主要有:

Dictionary<TKey,TValue>表示基于键进行组织的键/值对的集合。
List<T>表示可按索引访问的对象的列表。 提供用于对列表进行搜索、排序和修改的方法。
Queue<T> 表示对象的先进先出 (FIFO) 集合。
SortedList<TKey,TValue>表示基于相关的 IComparer<T> 实现按键进行排序的键/值对的集合。
Stack<T>表示对象的后进先出 (LIFO) 集合。

    
    
   
    
    

 

 

 

 

九、System.Collections.Concurrent 

Concurrent 中文翻译为并发,所以该命名空间下的集合类,都是在多线程并发的条件下是线程安全的。

我们知道,像List、Dictionary<,>等都不是线程安全的,如果您要让它线程安全,就要改用Concurrent命名空间下的集合类。

该空间下的集合类主要有:

ConcurrentBag<T>表示对象的线程安全的无序集合。
ConcurrentDictionary<TKey, TValue>表示可由多个线程同时访问的键/值对的线程安全集合。
ConcurrentQueue<T>表示线程安全的先进先出 (FIFO) 集合。
ConcurrentStack<T>表示线程安全的后进先出 (LIFO) 集合。

 

 

 

 

 

 

十、怎么知道自己要用什么集合

这个要看您的业务而定。

如果您不是在多线程下运行,则普通的泛型集合类System.Collections.Generic的集合即可。

若您的系统需要多线程和高并发,那么Concurrent命名空间的集合则是您的首选。

 

只要有可能,我们都是建议您首选泛型集合以及线程安全的集合。而不是使用弱类型的集合,因为那需要装箱拆箱,会带来性能损耗。通常我们平时开发一般都是泛型集合类居多。其中LIst<>、Dictionary<,>是很常用的。

 

最后,您也可以自行使用lock关键字编写线程安全的集合,如List的线程安全lock写法。这方面的代码,网上已经有现成的,各位可以自行找一下。

 

祝您用餐愉快。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值