C# HashTable Dictionary ConcurrentDictionary HashSet
今天是2021念的1月28号,时间荏苒,白驹过隙,仿佛2015年就是去年的事。
一:HashTable
使用键值对Key-Vaule来保存数据,Key和Vaule都是Object类型,所以当在保存和遍历的时候会发生数据转换,将Object转换成业务所需的数据类型,
那么会发生拆箱装箱操作,性能会降低。当遍历我们像遍历HashTable的时候,由于没有索引所以我们会用foreach来遍历而不使用for来循环。
默认的HashTable是允许单线程写入,多线程读取。当调用Synchronized() 方法可以获得完全线程安全的类型。
二:Dictionary
也是使用键值对来保存数据,Key和Value都是泛型指定确认类型的了,于是在效率上会比HashTable高。在.net 2.0时代,Dictionary属于非线程安全,
需要使用lock锁来保证不被其他线程来抢占资源,那么效率也会大大降低。
三:ConcurrentDictionary
为解决.net2.0中Dictionary的非线程安全,在.net4.0使用ConcurrentDictionary后不需要使用lock锁即可保证线程安全,在多个线程中添加数据也不会报错了。
三:HashSet
是用来对集合间的操作时使用,比如需要得到集合与集合之间的交集差集并集。HashSet不允许出现重复对象。