那种查找性能更好呢?

解决方案 »

  1.   

    肯定是Dictionary了因为Dictionary里面可以按照你放进入的key进行查询,很快捷
      

  2.   

    在3.5之前,想用哈希表来提高集合的查询效率,只有Hashtable和Dictionary<TKey,TValue>两种选择,而这两种都是键-值方式的存储。但有些时候,我们只需要其中一个值,例如一个Email集合,如果用泛型哈希表来存储,往往要在Key和Value各保存一次,不可避免的要造成内存浪费。而HashSet<T>只保存一个值,更加适合处理这种情况。
     
    此外,HashSet<T>的Add方法返回bool值,在添加数据时,如果发现集合中已经存在,则忽略这次操作,并返回false值。而Hashtable和Dictionary<TKey,TValue>碰到重复添加的情况会直接抛出错误。
     
    从使用上来看,HashSet<T>和线性集合List<T>更相似一些,但前者的查询效率有着极大的优势。假如,用户注册时输入邮箱要检查唯一性,而当前已注册的邮箱数量达到10万条,如果使用List<T>进行查询,需要遍历一次列表,时间复杂度为O(n),而使用HashSet<T>则不需要遍历,通过哈希算法直接得到列表中是否已存在,时间复杂度为O(1),这是哈希表的查询优势,在上一篇中已提到。
      

  3.   

    他们都是采用Hash方式,从数据结构上说,效率是一致的。
    只是一个偏重于存储“键值对”,另一个偏重于集合(不重复)。
      

  4.   

    <HashSet<T>不能做的事情>
    HashSet<T>是Set集合,它只实现了ICollection接口,在单独元素访问上,有很大的限制:
     
    跟List<T>相比,不能使用下标来访问元素,如:list[1] 。
     
    跟Dictionary<TKey,TValue>相比,不能通过键值来访问元素,例如:dic[key],因为HashSet<T>每条数据只保存一项,并不采用Key-Value的方式,换句话说,HashSet<T>中的Key就是Value,假如已经知道了Key,也没必要再查询去获取Value,需要做的只是检查值是否已存在。
     
    所以剩下的仅仅是开头提到的集合操作,这是它的缺点,也是特点。
      

  5.   


    我帮你写出引用吧:) 不过没能保证是原作者。
    "海口奶茶店"的".net集合类的研究" - 
    http://www.cnblogs.com/hkncd/archive/2011/05/09/2040978.html
    我相信现在的教育制度有些问题,学校没有教会学生们基本的学问态度和方法,更没有教会要尊重别人的成果。用别人的文章,而没有归功与别人,是不对的。
      

  6.   

    如非确实不要,不奢谈“那种性能更好”。设计一个框架系统,总要去考虑要不要兼容java和c++,要不要提供最低级的功能问题。但是除此以外,也会痛比较高级的功能。所以有了Dictionary之后,就不用HashTable了。但是它们同时出现在.net这并不奇怪。并不是说我永远不用HashTable,它就不能在.net中。
      

  7.   

    而HashSet跟字典根本是两个东西,它根本不是字典,你说的其实无法比较。根本不是一个东西,那么他们在逻辑上就有不同的意义和用法,谈不上什么性能问题。
      

  8.   

    一个是键值对,一个只有键。
    使用哪种根据功能需求而定,与性能无关。
    当然你也可以用Dictionary完全替代HashSet,会稍许牺牲一点点性能与一些空间。
      

  9.   

    用Reflector工具就可以发现,HashSet<T>和Dictionary<TKey,TValue>使用了相同的存储方式和哈希冲突算法.