【C#常见集合类型知识点分析】


常见的集合类型有:List、ArrayList、LinkedList、SortedList、Dictionary、HashTable、HashSet、Stack、Queue。

1 List类

表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。
命名空间:System.Collections.Generic

List集合底层是由数组封装的,由于数组不可改变大小,因此List集合在封装的数组存储满了时,需要重新创建一个容量更大的新数组。
在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。
优点:访问元素的效率比较高;
缺点:删除和添加元素效率低,因为要操作大量的元素

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

2 ArrayList

使用大小会根据需要动态增加的数组来实现 IList 接口。
命名空间:System.Collections
ArrayList是可变长数组,是非线程安全的集合。你可以将任意多的数据Add到ArrayList里面。其内部维护的数组,当长度不足时,会自动扩容为原来的两倍。
但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱、拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能。

ArrayList myAL = new ArrayList();

3 LinkedList

表示双重链接列表。
命名空间:System.Collections.Generic
LinkedList 是基于双向链表实现的非线程安全的集合,ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于 LinkedList。
LinkedList是一个链表结构,不能像数组一样随机访问,必须是每个元素依次遍历直到找到元素为止。
其结构的特殊性导致它查询数据慢。

LinkedList<int> a = new LinkedList<int>();

4 SortedList

表示键/值对的集合,这些键值对按键排序并可按照键和索引访问。
命名空间:System.Collections

SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
SortedList是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。
如果使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。键不能为null,但值可以。

SortedList sl = new SortedList();

5 Dictionary<k,v>

键值对
含名空间 :System.Collection.Generic

Dictionary里面的每一个元素都是一个键值对。键是唯一的,值不需要唯一,键和值都可以是任何类型(比如:string, int, 自定义类型等等)
通过一个键读取一个值得时间接近O(1),单线程中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用更充分。

Dictionary<string, string> dictExecutes = new Dictionary<string, string>();

6 HashTable

表示根据键的哈希代码进行组织的键/值对的集合。
命名空间:System.Collections

Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key和value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对。
HashTable是线程安全的,他的key和value都不可以为null。

Hashtable hashtable = new Hashtable();

7 HashSet

表示值的集。
命名空间:System.Collections.Generic

HashSet是一个高性能且无序的集合,所以Hashset不能做排序操作。由于HashSet无序,所以只能使用foreach来进行迭代,而无法使用for循环(不能操作索引)。
HashSet中的元素不重复(可以存放单一的null),即具有元素唯一性,若向 HashSet 中插入重复元素,其内部会忽视此次操作,不会报出异常。如果有一个具有唯一值的集合,推荐HashSet。

HashSet<string> hashSet = new HashSet<string>();

8 Stack

表示对象的简单后进先出 (LIFO) 非泛型集合。
命名空间:System.Collections

栈:先进后出

Stack s = new Stack();

9 Queue

表示对象的先进先出集合。
命名空间:System.Collections

队列:先进先出

Queue q = new Queue();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值