zoukankan      html  css  js  c++  java
  • 用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>。

  • 相关阅读:
    linux软件安装
    shell脚本
    ssh密钥登录及远程执行命令
    shell编程
    vi编辑器
    linux入门
    《玩转Bootstrap(JS插件篇)》笔记
    SharePoint BI
    Apache-ActiveMQ transport XmlMessage
    C#操作AD及Exchange Server总结(二)
  • 原文地址:https://www.cnblogs.com/zhucai/p/hashset_list.html
Copyright © 2011-2022 走看看