C#泛型、集合
什么是泛型?
泛型是C#2.0版本和公共语言运行库 (CLR) 中的一个非常重要的新功能。泛型就是类型参数化,用于处理的数据类型不固定的情况下,将类型作为参数传入。
使用泛型的好处?
代码复用:我们一套代码可以支持不同的类性。
降低了耦合性:代码逻辑和数据类型之间分离,实现了解耦。
更好的可读性:我们在使用集合的时候,定义了一个list 如List<String>,一看便知道这个一个存放String类型的list。
程序性能提高:在一定的程度上减少了类型转换装箱与拆箱操作带来的性能损耗。
泛型使用where约束的原因是什么?
约束指定类型参数的功能和预期。
五大集合类
Dictionary<TKey,TValue> | 表示基于键进行组织的键/值对的集合。 |
List<T> | 表示可按索引访问的对象的列表。 提供用于对列表进行搜索、排序和修改的方法。 |
Queue<T> | 表示对象的先进先出 (FIFO) 集合。 |
SortedList<TKey,TValue> | 表示基于相关的 IComparer<T> 实现按键进行排序的键/值对的集合。 |
Stack<T> | 表示对象的后进先出 (LIFO) 集合。 |
C#List是什么?
是一组连续的数据集合
支持泛型List<T>
支持排序,分组,复杂查询,过滤等相关操作
C#Dictionary和List比较
Dictionary字典:
命名空间:System.Collection.Generic
1、Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)
2、键必须是唯一的,而值不需要唯一的
3、键和值都可以是任何类型(比如:string, int, 自定义类型,等等)
4、通过一个键读取一个值的时间是接近O(1)
5、键值对之间的偏序可以不定义
List集合:
命名空间:System.Collections.Generic
1、支持复杂查询操作
2、集合中的数据是有序的
C#下Hashtable和Dictionary区别
1、Dictionary<K,V>在使用中是顺序存储的,而Hashtable由于使用的是哈希算法进行数据存储,是无序的。
2、Dictionary的key和value是泛型存储,Hashtable的key和value都是object。
3、Dictionary是泛型存储,不需要进行类型转换,Hashtable由于使用object,在存储或者读取值时都需要进行类型转换,所以比较耗时。
4、单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。
5、在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hash