为什么在HashSet上使用List?

时间:2013-08-28 12:19:29

标签: c# list hashset

可能是一个显而易见的问题,但我已经看到为什么在列表/数组上使用HashSet的原因很多。 我听说它有O(1)用于删除和搜索数据。

我从来没有听说过为什么要在HashSet上使用列表。

为什么反之亦然?

4 个答案:

答案 0 :(得分:9)

  • 列表允许重复,HashSet
  • 列表按其索引排序,HashSet没有隐式订单
  • 性能经常被高估,为工作选择合适的工具

答案 1 :(得分:3)

他们有不同的语义。列表按顺序排序(按插入顺序),允许重复,并按索引提供随机访问;哈希集是无序的,不允许重复(按设计删除它们),并且不提供随机访问。两者都完全有效,简单地说:针对不同的场景。

答案 2 :(得分:1)

好的,你可以将重复项插入List / Array。

来自HashSet.Add Method

  

返回值类型:

     

System.Boolean

     

如果元素被添加到HashSet对象,则为true;

     

如果元素已经存在,则为false。

答案 3 :(得分:0)

我参加聚会很晚,但是我想通过将问题转过头来为所选答案添加一些内容:

何时在列表上使用HashSet?

  1. 当集合中的对象肯定是唯一的,或者您不想添加重复项时。
  2. 您通常想查找集合中是否有某些对象。
  3. 如果您经常删除对象。添加所需的时间与将对象添加到列表中的时间差不多,但是在HashSet中删除它们的速度要快得多。
  4. 如果您不关心订单或通过索引直接访问。

请记住,您也可以通过HashSet进行“ foreach”。

Rango是正确的,因为有时性能会被高估;但是如果性能至关重要(并且顺序不重要),则HashSet可以比List更快。