代码之家  ›  专栏  ›  技术社区  ›  Pandincus

在C#NET中,用于在O(1)时间内获取项目的“适当”集合?

  •  6
  • Pandincus  · 技术社区  · 17 年前

    如果我正在存储一组字符串值,并且我希望能够在O(1)时间后找到它们,我经常做的事情是:

    foreach (String value in someStringCollection)
    {
        someDictionary.Add(value, String.Empty);
    }
    

    这样,我可以舒服地表演 恒定时间

    if (someDictionary.containsKey(someKey))
    {
        // etc
    }
    

    字符串。空 . 我是否应该使用更合适的.NET集合?

    4 回复  |  直到 17 年前
        1
  •  9
  •   user7116    17 年前

    如果您使用的是.NET3.5,请尝试 HashSet C5

    HashSet<string> stringSet = new HashSet<string>(someStringCollection);
    
    if (stringSet.Contains(someString))
    {
        ...
    }
    
        2
  •  3
  •   leppie    17 年前

    你可以用 HashSet<T> 在.NET3.5中,否则我会坚持使用当前的方法(实际上我更喜欢 Dictionary<string,bool>

        3
  •  2
  •   CodingWithSpike    17 年前

    初始尺寸

    从…起 Wikipedia :

    70%80%的元素数量 表槽和仍然表现良好。 机制,性能可以开始下降 慢慢地或慢慢地遭受痛苦 补充。为了解决这个问题,当 负载系数超过某个阈值,则 将原始表添加到此新表。在里面 Java的HashMap类,例如

        4
  •  1
  •   orcmid    17 年前

    我可能应该问这个问题,因为我经常看到这个问题。什么使你认为字典是O(1)?从技术上讲,唯一类似于O(1)的可能是使用整数索引值访问标准整数索引固定绑定数组(在以这种方式实现的数组中没有查找)。

    假设如果它看起来像一个数组引用,那么当“index”是一个

    我看到了这些问题,我甚至看到了声称O(1)的答案(不是关于这个特定的问题,但我确实看到了它们),没有任何理由或解释需要什么来确保O(1)真正实现。

    嗯,我想这是个不错的问题。在我把这句话贴在这里之后,我会这样做。