【问题标题】:Hashing performance in a HashSet<int> against a List<int> with ContainsHashSet<int> 中针对具有 Contains 的 List<int> 的散列性能
【发布时间】:2020-08-10 18:24:07
【问题描述】:

我正在寻找整数列表与整数哈希集之间的比较/性能注意事项。这就是 What is the difference between HashSet<T> and List<T>? 所说的 T 整数。

我将有多达几千个整数,我想找出对于单个整数,它们是否包含在这个集合中。

当然,这需要一个哈希集,但我想知道哈希在这里是否有用,因为它们只是开始的整数。首先散列它们不会在这里增加不必要的开销吗?

或者换句话说:使用哈希集是否有益,即使是整数集?

【问题讨论】:

  • “现在这当然需要哈希集,但我想知道哈希在这里是否有用,因为它们只是以整数开头” 表明缺乏理解如何两者之间的查找不同。 This answerthis one 来自您链接的问题似乎有您正在寻找的答案。
  • 你可能想检查GetHashCode的整数实现
  • @TheodorZouliasYeah。而且我想这个问题实际上只是措辞不好(我的坏)而不是代码的实际性能,这有点症状。

标签: c# performance hash hashset


【解决方案1】:

无论 T 是什么,都有一个简单但有效的经验法则:

  • 集合主要用于添加和迭代,很少 搜索 => 使用列表

  • 该集合大量用于研究 => 使用 HashSet

【讨论】:

  • 是的,我知道,但我的问题在于哈希实际上是一个整数。
【解决方案2】:

散列一个整数非常便宜,你可以在Int32.GetHashCode方法的源代码中看到:

// The absolute value of the int contained.
public override int GetHashCode()
{
    return m_value;
}

数字的哈希是数字本身。没有比这更便宜的了。所以没有理由担心开销。将您的号码输入HashSet,享受O(1) 计算复杂度的搜索。

【讨论】:

  • 这给了我想要的舒适感。
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 2015-07-29
  • 2020-10-22
  • 2015-12-25
  • 2017-12-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多