C#中利用HashSet代替List

NET3.5多了个HasSet<T>用来存储集合。从名称可以看出,它是基于Hash的。可以简单理解为没有Value的Dictionary<TKey,TValue>。

HashSet<T>不能用索引访问,不能存储重复数据,元素T必须正确实现了Equals和GetHashCode。

那它的优势是什么呢?

检索的性能。简单的说它的Contains方法的性能在大数据量时比List<T>好得多。HashSet<T>的Contains方法复杂度是O(1),List<T>的Contains方法复杂度是O(n)。

那么,在集合的目的是为了检索的情况下,我们应该使用HashSet<T>代替List<T>。比如一个存储关键字的集合,运行的时候通过其Contains方法检查输入字符串是否关键字。

HashSet<T>是专门设计用来做集合运算(取交集,并集等),所以提供了UnionWith、IntersectWith等方法。

另:如果数据量很小,那么任然推荐使用List<T>。
 这个“小”是多小呢?其实是用Hashtable还是ListDictionary时存在同样的取舍问题,.NET为其设计了HybridDictionary类实现一个混合容器,当数量小于等于8(目前是8,不保证微软以后不会变)的时候,HybridDictionary内部使用ListDictionary,当数量大于8的时候,HybridDictionary内部使用Hashtable。所以,如果我们知道我们集合的数量不会大于8的话,就算目的是为了检索,任然推荐使用List<T>。

posted @   dreamw  阅读(201)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示