我们什么时候使用HashSet<>

时间:2012-01-21 06:44:45

标签: c# asp.net

我有一个小样本。

//Class
public class GetEntity
 {
   public string name1 { get; set; }
   public string name2 { get; set; }
   public GetEntity() { }
 }

public void GetHash()
   {
     HashSet objHash = new HashSet();
     GetEntity obj = new GetEntity();
     obj.name1 = "Ram";
     obj.name2 = "Shyam";
     objHash.Add(obj);
     foreach (GetEntity objEntity in objHash)
      {
        Label2.Text = objEntity.name1.ToString() + objEntity.name2.ToString();
      }

   }

代码工作正常。通过Dictionary和List完成任务。但我想知道何时使用HashSet<> ,词典<>或列表<>。只有性能问题或任何其他我不理解的事情。谢谢。

4 个答案:

答案 0 :(得分:5)

i want to know when we use HashSet<> , Dictionary<> or <List>

他们都有不同的目的,并在不同的场景中使用

  

HashSet的

当您想拥有具有唯一元素的集合时使用。 HashSet存储唯一元素的列表,不允许重复元素。

  

字典

当您想要对唯一键具有值时使用。 Dictionary中的每个元素都有两个部分:一个(唯一的)键和一个值。您可以在其中存储唯一键(就像Hashset一样),此外您还可以存储针对该唯一键的值。

  

列表

只是一个简单的元素集合。您可以在其中包含重复项。

答案 1 :(得分:2)

Set不包含重复值。

答案 2 :(得分:1)

我自己不是C#家伙但是跟随应该是差异。

如果我错了,请纠正我

HashSet只会采用唯一值,值可以通过索引随机访问,在恒定时间内工作

Dictionary将采用键值对,值可以通过键名随机访问,键名不能重复。这也是一个非常快的DS。在恒定时间工作

列表将采用n值,即使它们不是唯一的,也必须按顺序访问值。在最坏的情况下,插入和检索的时间复杂度为o(n)

答案 3 :(得分:0)

它们都是被称为集合,通常位于命名空间 System.Collections.Generic 中。

何时使用某种数据结构基本上需要了解它们支持的操作。对于 HashSet ,它基本上是数学中的 Set ,并且支持高效的添加,删除,并快速判断元素是否存在< / b>在集合中。鉴于它是一个集合, Hashset 中的元素必须唯一

对于 Dictionary ,它基本上是一种映射结构,即一组键值对 Dictionary 提供有效的使用给定键的键值对查询以及添加/删除键值对。

List 是一个有序元素集合。与Hashsets不同,判断列表中元素的存在是低效。与字典不同,内部数据结构不是键值对,而是简单对象。另一个区别是您可以使用索引(如list [3])来有效地访问列表中的元素。 (虽然对于LinkedList来说不是这样)